2
得到這是一個服務器端的WebSocket客戶端。我試圖讓用戶輸入一個循環,然後發送,作爲一個WebSocket的消息發送到服務器。基本操作正在工作,我可以ping/pong服務器。但它不工作放置一個循環中的WebSocket on(:open)
功能:循環中EventMachine的/王菲的WebSocket
客戶端(節選):
require 'faye/websocket'
require 'eventmachine'
EM.run do
ws = Faye::WebSocket::Client.new('ws://localhost:3000/')
ws.on :message do |event|
puts event.data
end
ws.on :open do |event|
ws.send "predefined" # this works
ws.send gets.chomp # this does too
loop { ws.send gets.chomp } # this does not
end
end
服務器(節選)這似乎是工作的罰款:
def self.onmessage(request, ws, msg)
EM.next_tick { Sockets.each{|s| s.send msg.data } }
end
我想問題是循環阻止返回和事件機器移動到下一個節拍的on(:open)
功能。
我可以使用TickLoop解鎖事件機:
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
}
但這不是理想的,因爲每個客戶端通過gets.chomp
阻斷。我希望用戶輸入無法從工作阻止on(:message)
處理程序。
在這一天結束時,我想我可以做一個包裹腳本,手錶更改的文件,併發送gets.chomp
輸出那裏。但我希望有一個更簡單的方法。