Ruby 循环进入Eventmachine/faye websocket

Ruby 循环进入Eventmachine/faye websocket,ruby,eventmachine,faye,Ruby,Eventmachine,Faye,这是一个服务器端websocket客户端。我试图在循环中获取用户输入,然后将其作为websocket消息发送到服务器。基本操作正常,我可以对服务器进行ping/pong操作。但是在websocketon(:open)函数中放置循环不起作用: 客户(摘录): 服务器(摘录)似乎工作正常: def self.onmessage(request, ws, msg) EM.next_tick { Sockets.each{|s| s.send msg.data } } end 我认为问

这是一个服务器端websocket客户端。我试图在循环中获取用户输入,然后将其作为websocket消息发送到服务器。基本操作正常,我可以对服务器进行ping/pong操作。但是在websocket
on(:open)
函数中放置循环不起作用:

客户(摘录):

服务器(摘录)似乎工作正常:

  def self.onmessage(request, ws, msg)
    EM.next_tick { Sockets.each{|s| s.send msg.data } }
  end
我认为问题在于循环阻止(:open)函数返回并将事件机移动到下一个滴答声

我可以使用以下方法取消阻止事件计算机:

但这并不理想,因为每个客户端都被
get.chomp
阻止。我希望用户输入不会阻止(:message)处理程序的
工作


在一天结束时,我想我可以制作一个包装器脚本来监视文件的更改,并将
gets.chomp
输出发送到那里。但我希望有一个更简单的方法

最后在滴答循环中放入一个线程:

  EM.tick_loop do
    Thread.new {
      inp = gets.chomp
      Ws.send inp
    }
  end.on_stop { EM.stop }
def start_tick_loop
  EM.tick_loop do
    Ws.send gets.chomp
  end.on_stop { EM.stop }
end

EM.run {
  Ws.on :open do |event|
    start_tick_loop
  end
}
  EM.tick_loop do
    Thread.new {
      inp = gets.chomp
      Ws.send inp
    }
  end.on_stop { EM.stop }