Ruby套接字和并行事件处理

Ruby套接字和并行事件处理,ruby,multithreading,events,Ruby,Multithreading,Events,我正在编写一个库,它可以与socket服务器交互,socket服务器将数据作为事件传输到我的库发送给它的特定操作 我创建了一个Actions模块,该模块对操作进行格式化,以便服务器可以读取它。它还生成一个action_id,因为事件解析器可以用发送它的操作来标识它。每个操作可能有多个事件 当我将动作发送到服务器时,事件解析器仍在从服务器获取数据,因此它们彼此独立工作(但它们确实一起工作:事件响应聚合器触发动作回调) 在我的模型中,我想从服务器获取一些资源的列表。服务器一次只发送一行数据,但这是由

我正在编写一个库,它可以与socket服务器交互,socket服务器将数据作为事件传输到我的库发送给它的特定操作

我创建了一个Actions模块,该模块对操作进行格式化,以便服务器可以读取它。它还生成一个action_id,因为事件解析器可以用发送它的操作来标识它。每个操作可能有多个事件

当我将动作发送到服务器时,事件解析器仍在从服务器获取数据,因此它们彼此独立工作(但它们确实一起工作:事件响应聚合器触发动作回调)

在我的模型中,我想从服务器获取一些资源的列表。服务器一次只发送一行数据,但这是由事件聚合器处理的,所以不用担心

好吧,我的问题是: 在我的模型中,我请求资源,但由于事件正在另一个线程中解析,我需要执行“无限”循环,检查列表是否已填充,然后中断以将其返回给模型的使用者(例如,我的控制器)

还有其他(更好的)方法吗?还是我走对了方向?我喜欢你的想法:)

下面是我的故事代码:

请签出。
它旨在简化此类应用程序。

这取决于实现。在您提供的代码中,您没有显示请求和响应的实际处理方式

如果您确切地知道应该收到的响应数量,那么在每个响应中,您可以检查是否全部完成,然后执行特定的操作。e、 g

# suppose response_receiver is the method which receives the server response
def response_receiver data
  @responses_list << data
  if @response_list.size == @expected_size
    # Execute some action
  end
end
#假设response_receiver是接收服务器响应的方法
def响应接收器数据
@答复清单