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

Yal*_*llo 0 ruby error-handling iostream nonblocking send

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

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

Errno::EAGAIN: Resource temporarily unavailable - read would block #etc. etc. 
Run Code Online (Sandbox Code Playgroud)

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

Мал*_*евъ 5

需要这对方法#write(read)_nonblock,以便在数据未准备好发送或接收时,对所需的代码进行一些处理.该ruby 文档说的方法如下:

如果异常是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
Run Code Online (Sandbox Code Playgroud)