【发布时间】:2013-08-22 13:53:24
【问题描述】:
我想用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
}
现在我想开发一个演示,服务器可以通过 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?怎么样?
有人可以帮我提供一个代码示例 chunck 吗? 谢谢! 乔治
【问题讨论】:
-
EM.add_periodic_timer(1){ puts "1 second passed" }
标签: ruby-on-rails ruby websocket eventmachine