Ruby 循环进入Eventmachine/faye websocket
这是一个服务器端websocket客户端。我试图在循环中获取用户输入,然后将其作为websocket消息发送到服务器。基本操作正常,我可以对服务器进行ping/pong操作。但是在websocketRuby 循环进入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 我认为问
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 }