我有一个带有websocket-rails gem 的 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
。
我尝试使用faye-websocket-ruby和websocket-client-simple来实现一个普通的 WebSocket 客户端,但是在我的头在键盘上敲了一段时间之后,我发现有某种“握手”过程使用connection_id
从client_connected
消息中。基本上这个其他问题中提供的解决方案都不适合我。
我需要了解是否MyDaemon
可以在我的内部直接订阅一些WebsocketRails
回调,甚至在 EventMachine 内部,或者我应该如何在 Ruby 本身中实现 Websocket 客户端。
我最后一次尝试拥有一个 ruby 客户端可以在这个 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
可能我错过了一些非常愚蠢的东西,所以我在这里寻求您的帮助!