我有一个协议,通过TCP工作,没有行结束符号。而不是那样,协议的结束和开始应该由时间定义。
所以IO#gets
和IO#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