Ruby 言語 gem em-websocket: https://github.com/igrigorik/em-websocketを使用 して、eventmachine 上で websocket サーバーを実行したいと考えています。
エコー サーバーのデモを正常に実行します。
EM.run {
EM::WebSocket.run(:host => "0.0.0.0", :port => 8080) do |ws|
ws.onopen { |handshake|
puts "WebSocket connection open"
ws.send "Hello Client, you connected to #{handshake.path}"
}
ws.onclose { puts "Connection closed" }
ws.onmessage { |msg|
puts "Recieved message: #{msg}"
ws.send "Pong: #{msg}"
}
end
}
ここで、サーバーが接続されたクライアントに websocket メッセージを介して n ミリ秒 (ランダム値) ごとにいくつかのデータをプッシュできるデモを開発したいと思います...事実上次のようなものです:
def periodic_push
# random elapsed: from 100 milliseconds to 6 seconds
msec_value = (rand(100..6000) / 1000.0 )
message = "time: #{Time.now} value: #{msec_value.to_s}"
ws.send message
puts message
sleep (msec_value)
end
EM ループ内で sleep() システム コールを使用できないことは承知していますが、定期的なイベントをEM::WebSocket loop
;に挿入する方法がわかりません。たぶん EventMachine::PeriodicTimer
?どうやって ?
誰かがコード例のチャンクで私を助けることができますか? ありがとう!ジョルジオ