我使用TCPSocket连接到服务器作为客户端。重点是保持连接打开并在那里发送或在收到消息时立即收到消息。
发送消息没有问题,但是当服务器没有任何响应时,在主线程中执行socket.recv(n)
会使客户端的主线程在等待数据时暂停。
在Ruby中使用持久连接来防止主线程阻塞的好习惯是什么?
假设应该使用额外的线程。在Rails应用程序中何处插入此线程初始化?做一个工人流程?
答案 0 :(得分:1)
当然可以在专用线程上接收数据。但也请考虑使用IO#select
或IO#read_nonblock
。 (TCPSocket
是IO
的子类。)如果您要等待来自多个套接字中的任何一个的数据,IO#select
将是理想的。如果您正在主线程上进行其他处理,但还需要保持对来自套接字的输入的响应,则可以每隔一段时间调用IO#read_nonblock
。