Spring websockets Gebrochenes Rohr und Client empfangen keine Nachrichten

9

Ich habe ein paar Probleme mit websockets:

  • java.io.IOException: Broken Pipe
  • Client empfängt keine Nachrichten TL; DR

Wichtigste Dinge, die ich wissen möchte:

  • Bitte listen Sie alle möglichen Szenarien auf, warum die Client-Seite die Verbindung schließt (abgesehen vom Aktualisieren oder Schließen der Registerkarte).
  • Kann eine Ausnahme für unterbrochene Pipes auftreten, abgesehen davon, dass der Server über eine unterbrochene Verbindung eine Nachricht an den Client sendet? Wenn ja, wie?
  • Was sind die möglichen Szenarien, warum ein Server keine Nachricht sendet, obwohl der Server Heartbeats sendet? (In diesem Fall muss ich die Anwendung neu starten, damit sie wieder funktioniert. Dies ist eine schreckliche Lösung, da sie bereits in Produktion ist.)

Ich habe ein SpringMVC -Projekt, das websockets verwendet; SockJS clientseitig und org.springframework.web.socket.handler.TextWebSocketHandler serverseitig.

A JSON wird serverseitig generiert und an den Client gesendet. Manchmal bekomme ich java.io.IOException: Broken Pipe . Ich googelte / StackOverflowed viel und fand zu viele Dinge, die ich nicht verstehe, aber der Grund ist wahrscheinlich die Verbindung ist Client-Seite geschlossen und der Server sendet immer noch eine Nachricht (zum Beispiel einen Herzschlag). Klingt das okay? Was sind andere Ursachen für diese Ausnahme? Was sind die Gründe für die Client-Seite, die Verbindung zu schließen (abgesehen von der Aktualisierung oder dem Schließen der Registerkarte)?

Manchmal erhält die Client-Seite auch keine Nachrichten vom Server, obwohl der Server sie senden sollte. Ich protokolliere vor und nach dem Senden der Nachricht, und beide Protokollanweisungen werden gedruckt. Hat jemand eine Idee, warum dies passieren kann? Ich habe keine Fehler im Konsolenprotokoll von Chrome. Aktualisieren der Seite funktioniert nicht, ich muss das Frühjahrsprojekt neu starten ...

Wenn Sie weitere Informationen benötigen, hinterlassen Sie bitte einen Kommentar.

Clientseite %Vor%

Serverseite
Service

%Vor%

WebSocketHandler

%Vor%     
J. Kamans 14.11.2016, 16:00
quelle

2 Antworten

1

Nur eine begründete Vermutung: Überprüfen Sie Ihre Netzwerkgeräte. Vielleicht gibt es eine falsch konfigurierte Firewall, die diese Verbindungen beendet; oder, noch schlimmer, kaputte Netzwerkgeräte, die die Verbindungen beenden. Wenn Ihr Server über mehrere NICs verfügt (was wahrscheinlich der Fall ist), ist es auch möglich, dass diese NICs falsch konfiguriert werden oder dass Sie über verschiedene NICs eine Verbindung zum Server herstellen.

    
Mr.Radar 24.11.2016 10:34
quelle
1

Wenn dieses Problem versehentlich auftritt, ist es möglich, dass Sie ein Problem mit einem Cache haben - überprüfen Sie, ob spring oder SocksJS eigene Caches für Socket-Interaktionen hat.

Erfolgt dies auf Ihren Geräten (oder auf Geräten, die Sie steuern)?

Zusätzlich kann ich Ihnen vorschlagen, einen Netzwerk-Paket-Analysator wie wireshark zu verwenden. Mit diesem Tool sehen Sie die aktuelle Netzwerkaktivität "online"

Einige externe Gründe, die die Verbindung trennen können, ohne sie korrekt zu stoppen (und Sie können sie ohne Verbindungsüberprüfungen nicht verwalten):

  • Gerät aussetzen / ausschalten
  • Netzwerkfehler
  • Browser schließt einen Fehler

Ich denke, das ist ein kleiner Teil der vollständigen Liste möglicher Gründe, die Verbindung zu zerstören.

    
Pavel Uvarov 24.11.2016 12:45
quelle

Tags und Links