【问题标题】:Persistent TCPSocket and Ruby threads持久的 TCPSocket 和 Ruby 线程
【发布时间】:2014-05-26 12:00:05
【问题描述】:

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

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

在 Ruby 中使用持久连接来防止主线程阻塞的最佳做法是什么?

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2011-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 1970-01-01
      • 1970-01-01
      • 2015-08-04
      • 1970-01-01
      相关资源
      最近更新 更多