如何将Ruby的write_nonblock / read_nonblock与服务器/客户端一起使用?

时间:2013-12-16 05:34:25

标签: ruby error-handling iostream send nonblocking

我正在尝试将Ruby与服务器一起使用。我从玩家那里得到一个输入或一个字符串,这样服务器就会玩一场战争(纸牌游戏)。

真正令人沮丧的是我正在使用read和write_nonblock,并且我一直遇到错误,我不知道它们为什么会出现,因此不知道如何解决它们。

Errno::EAGAIN: Resource temporarily unavailable - read would block #etc. etc. 

那么......我如何在服务器和客户端上正确使用读写non_block来发送和接收数据(所以我可以触发事件)? (我是一个新的程序员,所以解释越简单越好。)

1 个答案:

答案 0 :(得分:5)

需要一对方法#write(read)_nonblock,以便在数据未准备好发送或接收时,对您需要的代码进行一些处理。 ruby docs对方法说了以下内容:

  

如果异常为Errno::EWOULDBLOCKErrno::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