Ruby IO直接获得一个数据包

时间:2015-02-03 12:19:24

标签: ruby tcp timer io

我有一个协议,通过TCP工作,没有行结束符号。而不是那样,协议的结束和开始应该由时间定义。

所以IO#getsIO#readline不起作用,因为它在数据包末尾没有\n

是否可以定义数据包的结尾?例如,如果某些时间不是新数据 - 这是数据包结束吗?

UPD:

我找到了这样的解决方案,不了解性能,但它确实有效:

class IO
  include Timeout

  #time - time in seconds to wait from last byte to understand packet end
  def gett(time)
    raw = getc
    loop {
      begin
        timeout(time){raw << getc}
      rescue Timeout::Error
        break
      end
    }
    raw
  end
end

0 个答案:

没有答案