Я хотел бы использовать рубиновый язык gem em-websocket: https://github.com/igrigorik/em-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
}
теперь я хотел бы разработать демонстрацию, в которой сервер мог бы передавать каждые 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
Я знаю, что НЕ могу использовать системный вызов sleep() внутри цикла EM, но я не могу понять, как вставить периодическое событие в EM::WebSocket loop
; может с EventMachine::PeriodicTimer
? как ?
Кто-нибудь может помочь мне с примером кода? Благодарность! Джорджио