0

我正在使用 TCPSocket 作为客户端连接到服务器。要点是保持连接打开,并在消息到达后立即发送或接收消息。

发送消息没有问题,但是socket.recv(n)当服务器没有响应时在主线程中执行,使客户端的主线程在等待数据时暂停。

在 Ruby 中使用持久连接来防止主线程阻塞的好习惯是什么?

假设应该使用额外的线程。在 Rails 应用程序中的何处插入此线程初始化?制作一个工作进程?

4

1 回答 1

1

在专用线程上接收数据当然是可能的。但也可以考虑使用IO#selector IO#read_nonblock。(TCPSocket是 的子类IO。)如果您正在等待来自多个套接字中的任何一个的数据,那IO#select将是理想的。如果您正在主线程上进行其他处理,但还需要对来自套接字的输入保持响应,则可以IO#read_nonblock间隔调用。

于 2014-05-26T12:29:03.640 回答