У меня есть приложение Rails с камнем websocket-rails.Триггер/Подпишитесь на websocket-rails событие изнутри рельса бегун
Внутри моего приложения есть демон, который я запускаю с rails runner MyDaemon.start
Я использую websocket-rails Synchronization, так что мой config/initializers/websocket_rails.rb
выглядит следующим образом:
WebsocketRails.setup do |config|
config.log_internal_events = false
config.standalone = false
config.synchronize = true
end
Внутри MyDaemon
, используя синхронизацию, я могу вызвать событие что достигнет как моих WebsocketRails::BaseController
, так и моего javascript WebSocketRails
.
Что я пытаюсь сделать, так это найти способ привязки к событиям из моего MyDaemon
.
Я пытался реализовать простой клиент WebSocket, используя как faye-websocket-ruby и websocket-client-simple, но после того, как стучал головой на клавиатуре в течение некоторого времени, я понял, что есть какой-то процесс «рукопожатия» с использованием connection_id
из client_connected
сообщение. В принципе, ни одно из решений, представленных в this other so question, не работает.
Мне нужно понять, если внутри моего MyDaemon
Я могу подписаться непосредственно на обратный вызов WebsocketRails
, даже внутри EventMachine, или как я должен реализовать клиент Websocket в Ruby.
Моя последнюю попытку есть клиент рубинового можно найти в this gist, и это пример вывод:
ruby client.rb ws://localhost:3000/websocket
[:open, {"upgrade"=>"websocket", "connection"=>"Upgrade", "sec-websocket-accept"=>"zNTdGvxFKJeP+1PyGf27T4x2PGo="}]
JSON message is
[["client_connected", {"id"=>nil, "channel"=>nil, "user_id"=>nil, "data"=>{"connection_id"=>"4b7b91001befb160d17b"}, "success"=>nil, "result"=>nil, "token"=>nil, "server_token"=>nil}]]
client id is 4b7b91001befb160d17b
[:message, "[[\"client_connected\",{\"id\":null,\"channel\":null,\"user_id\":null,\"data\":{\"connection_id\":\"4b7b91001befb160d17b\"},\"success\":null,\"result\":null,\"token\":null,\"server_token\":null}]]"]
JSON message is
[["websocket_rails.ping", {"id"=>nil, "channel"=>nil, "user_id"=>nil, "data"=>{}, "success"=>nil, "result"=>nil, "token"=>nil, "server_token"=>nil}]]
Sending ["pong",{}]
[:message, "[[\"websocket_rails.ping\",{\"id\":null,\"channel\":null,\"user_id\":null,\"data\":{},\"success\":null,\"result\":null,\"token\":null,\"server_token\":null}]]"]
[:close, 1006, ""]
Хотя журнал websocket-rails
является:
I [2015-06-27 02:08:45.250] [ConnectionManager] Connection opened: #<Connection::2b3dddaf3ec4ed5e3550>
I [2015-06-27 02:08:45.251] [Dispatcher] Started Event: client_connected
I [2015-06-27 02:08:45.251] [Dispatcher] Name: client_connected
I [2015-06-27 02:08:45.251] [Dispatcher] Data: {"connection_id"=>"2b3dddaf3ec4ed5e3550"}
I [2015-06-27 02:08:45.251] [Dispatcher] Connection: #<Connection::2b3dddaf3ec4ed5e3550>
I [2015-06-27 02:08:45.251] [Dispatcher] Event client_connected Finished in 0.000174623 seconds
I [2015-06-27 02:09:05.252] [ConnectionManager] Connection closed: #<Connection::2b3dddaf3ec4ed5e3550>
I [2015-06-27 02:09:05.252] [Dispatcher] Started Event: client_disconnected
I [2015-06-27 02:09:05.252] [Dispatcher] Name: client_disconnected
I [2015-06-27 02:09:05.252] [Dispatcher] Connection: #<Connection::2b3dddaf3ec4ed5e3550>
I [2015-06-27 02:09:05.253] [Dispatcher] Event client_disconnected Finished in 0.000236669 seconds
Возможно я пропуская что-то очень глупо, поэтому я здесь, чтобы попросить вашу помощь!