ruby - 如何在服务器/客户端上使用Ruby的write_nonblock/read_nonblock?

标签 ruby error-handling iostream send nonblocking

我正在尝试将Ruby与服务器配合使用。我正在从玩家处获得回车或字符串,以便服务器玩起 war 之手(纸牌游戏)。

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

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

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

最佳答案

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

If the exception is Errno::EWOULDBLOCK or Errno::AGAIN, it is extended by IO::WaitReadable. So IO::WaitReadable can be used to rescue the exceptions for retrying read_nonblock.



只是捕获Errno::EAGAIN异常。

注意retry关键字使方法类似于通常的#write(read):
begin
   io.write_nonblock
rescue Errno::EAGAIN
   retry # or do something else
end

关于ruby - 如何在服务器/客户端上使用Ruby的write_nonblock/read_nonblock?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20604130/

相关文章:

ruby-on-rails - 如何从此 instagram json 获取 created_time?

c++ - 带有格式化字符串的 istream 提取值

java - 使用 JRuby 或 Python 调用一些第三方 Java 库 - 架构问题

jquery - 使用 jQuery : should I use $. ajaxSetup() 或 $.fn.ajaxError() 处理 AJAX 错误

sql - 存储过程将不返回任何错误消息或编号

node.js - 处理或防止错误导致我在 Heroku 上的整个 node.js 应用程序崩溃

c++ - 我什么时候应该关注 std::iostream::sentry?

C++ io 流与 mmap

ruby - MongoDB + ruby : updating records in an iteration

ruby - "database.config"在 Mongify 中的位置是什么?