持久的TCPSocket和Ruby线程

时间:2014-05-26 12:00:06

标签: ruby-on-rails multithreading keep-alive tcpsocket

我使用TCPSocket连接到服务器作为客户端。重点是保持连接打开并在那里发送或在收到消息时立即收到消息。

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

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

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

1 个答案:

答案 0 :(得分:1)

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