Ich bin ziemlich neu zu Programmierung im Allgemeinen und ich benutze EventMachine auf der Client-und Server-Seite, um eine Websocket-Verbindung zwischen ihnen zu öffnen.EventMachine Reconnection Probleme
Mein Problem ist mit der Client-Seite, und wenn die Verbindung aufgrund von Problemen mit der Netzwerkverbindung verloren geht.
def websocket_connection
EM.run do
begin
puts "Connecting"
ws = WebSocket::EventMachine::Client.connect(:uri => "Server Info")
puts "Success WS: #{ws}"
rescue
puts "I've been rescued"
puts "Rescue WS: #{ws}"
ws = nil
sleep 10
websocket_connection
end
ws.onopen do
puts "Connected!"
end
ws.onping do
put "Ping!"
end
ws.onmessage do |msg|
puts msg
end
ws.onclose do |code|
puts "Connection Closed!"
puts "Code: #{code}"
ws = nil
sleep 10
websocket_connection
end
end
end
Diese Verbindung zum Server her ganz gut, aber wenn ich die Netzwerkverbindung ziehen und wieder einstecken ich in einer Endlosschleife von ihm stecken bin versucht, mit dem Code 1002 wieder zu verbinden (WebSocket-Protokollfehler.).
Ich habe versucht, EM.reconnect (server, port, ws) auf schließen, aber es stürzt ab und wirft diesen Fehler `connect_server ': Adresse kann nicht aufgelöst werden: Der angeforderte Name ist gültig, aber keine Daten der angeforderten Typ wurde gefunden. Das macht Sinn, weil es DNS nicht kontaktieren kann. Selbst wenn man die EM.reconnect in eine begin rette einpackt versucht es einfach einmal und versucht es nie wieder.
Ich habe versucht, EventMachine zu beenden und zu schließen (EM.stop), aber das bleibt in einer Endlosschleife stecken, die versucht, die Verbindung wiederherzustellen.
Ich bin nicht wirklich sicher, wie dieser Client nach einem Netzwerkverlust die Verbindung zum Server wiederherstellen kann.
EDIT: Der Code oben ein wenig aktualisiert.
CMD Line:
Erfolg WS: #WebSocket :: eventmachine :: Kunde: 0x00000002909ac8
Pulled Ethernet-Kabel
Rettungs WS:
Connected Ethernet-Kabel
Erfolg WS: #WebSocket :: EventMachine :: Client: 0x000000031c42a8
Erfolg WS: #WebSocket :: EventMachine :: Client: 0x000000031a3d50
Erfolg WS: #WebSocket :: EventMachine :: Client: 0x00000003198a90
CTRL + C
block in websocket_connection': undefined method
OnOpen‘für nil: NilClass (NoMethodError)
So sieht es aus wie er denkt, seine Verbindungs, ich sehe keine Verbindungen auf der Serverseite.