我正在尝试将Ruby与服务器一起使用。我从玩家那里得到一个输入或一个字符串,这样服务器就会玩一场战争(纸牌游戏)。
真正令人沮丧的是我正在使用read和write_nonblock,并且我一直遇到错误,我不知道它们为什么会出现,因此不知道如何解决它们。
Errno::EAGAIN: Resource temporarily unavailable - read would block #etc. etc.
那么......我如何在服务器和客户端上正确使用读写non_block来发送和接收数据(所以我可以触发事件)? (我是一个新的程序员,所以解释越简单越好。)
答案 0 :(得分:5)
需要一对方法#write(read)_nonblock
,以便在数据未准备好发送或接收时,对您需要的代码进行一些处理。 ruby
docs对方法说了以下内容:
如果异常为
Errno::EWOULDBLOCK
或Errno::AGAIN
,则由IO :: WaitReadable扩展。因此IO :: WaitReadable可用于挽救重试read_nonblock的异常。
只是陷入Errno::EAGAIN
例外。
注意 retry
关键字使方法像往常一样#write(read)
:
begin
io.write_nonblock
rescue Errno::EAGAIN
retry # or do something else
end