Ich habe ein paar Probleme mit websockets:
java.io.IOException: Broken Pipe
Wichtigste Dinge, die ich wissen möchte:
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
WebSocketHandler
%Vor%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.
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):
Ich denke, das ist ein kleiner Teil der vollständigen Liste möglicher Gründe, die Verbindung zu zerstören.