Ich versuche, von meinem Controller eine Nachricht an alle registrierten Clients zu senden. Der bessere Weg, den ich gefunden habe, ist, einen Faye-Client in meinem Controller zu erstellen, meine Nachricht zu senden und direkt nach dem Senden der Nachricht zu schließen.Rails Faye Websocket Client nur eine Nachricht zu senden
#my_controller.rb
EM.run {
ws = Faye::WebSocket::Client.new(Rails.application.config.websocket_url)
ws.send(JSON.dump(this_order.service_json))
EM.stop
}
Obwohl dieser Code teilweise funktioniert, schließt es alle meine Browser-Verbindungen zu Faye.
Faye in einer Middleware, wie dies umgesetzt:
class FayeMiddleware
KEEPALIVE_TIME = 30 # in seconds
def initialize(app)
@app = app
@clients = []
end
def call(env)
if Faye::WebSocket.websocket?(env)
# WebSockets logic goes here
ws = Faye::WebSocket.new(env, nil, {ping: KEEPALIVE_TIME })
ws.on :open do |event|
p [:open, ws.object_id]
@clients << ws
end
ws.on :close do |event|
p [:close, ws.object_id, event.code, event.reason]
@clients.delete(ws)
ws = nil
end
ws.on :message do |event|
p [:message, event.data]
puts event.data
@clients.each {|client| client.send(event.data) }
end
# Return async Rack response
ws.rack_response
else
@app.call(env)
end
end
end
ich diesen Code gemacht this Tutorial bezieht.
Ich verstehe nicht, warum alle meine Web-Sockets geschlossen werden, wenn ich meine EM stoppe. Kann mir jemand helfen ?
ein Modul machen und auf diese Weise nutzen. . http://stackoverflow.com/questions/33567167/how-can-i-push-to-faye-server-from-rails-controller/33567635#33567635 –