有一段时间我一直在使用旧的Ruby发行版(我认为它是1.8.6),我使用套接字库编写了它。旧库有一个名为 ready?的方法,它检查是否仍有数据未经阻塞而接收。什么是1.9中最好的替代品?
我之所以需要它是因为我有一个这样的程序:
def handle_socket_messages
while true
break unless messages_to_send
sent_messages
end
while @s and @s.ready?
#read messages
readStr = @s.recv(0x1024)
...
end
end
(然后我有另一个循环,它继续执行handle_socket_messages方法,然后使用sleep,这样循环不会旋转太快,以及其他一些方法。
正如您所看到的,我需要检查是否将使用 @ s.ready?(@s是套接字)接收数据,否则循环挂起 readStr = @s .recv(0x1024),其中套接字一直想要接收服务器不发送的数据(当它不应该等待数据时)。
这种方法的最佳替代品是什么?
答案 0 :(得分:0)
解决方案是:
class Socket
def ready
not IO.select([self], nil, nil, 0) == nil
end
end
答案 1 :(得分:0)
我通过要求ready?
在Ruby 2.2.2中成功使用io/wait
方法。在这个SO答案中有更多信息:https://stackoverflow.com/a/3983850/2464