我想使用 ruby 语言 gem em-websocket: https ://github.com/igrigorik/em-websocket 在 eventmachine 上运行 websocket 服务器。
我成功运行了 echo 服务器演示:
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
}
现在我想开发一个演示,服务器可以每隔 n 毫秒(随机值)通过 websocket 消息将一些数据推送到连接的客户端......几乎类似于:
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
?如何 ?
有人可以帮我提供一个代码示例 chunck 吗?谢谢!乔治