Ich habe eine Client-Server-WebSocket-Verbindung, die für etwa 40 Sekunden da sein sollte. Idealerweise sollte es für immer offen sein.
Der Client sendet kontinuierlich Daten an den Server und umgekehrt.
Im Moment benutze ich diese Sequenz:
%Vor%Offensichtlich werden im Falle eines Fehlers die aktuellen Anforderungsdaten überhaupt nicht gesendet.
Um ehrlich zu sein, gibt es manchmal Fehler, dass Websocket immer noch im Verbindungsstatus ist. Diese Verbindung bricht häufig aufgrund von Netzwerkproblemen. Kurz gesagt, es funktioniert nicht perfekt.
Ich habe ein besseres Design gelesen: Warten für den readyState eines WebSockets, zu ändern, aber nicht alle Fälle, die ich bearbeiten muss.
Auch ich habe darüber gegoogelt aber konnte nicht die richtige Prozedur dafür bekommen.
Was ist der richtige Weg, um reguläre Daten über WebSockets zu senden, die diese Probleme wie Verbindungsunterbrechung usw. gut behandeln?
Ein Ereignis, das Sie anscheinend nicht abdecken, ist geschlossen. Das sollte wirklich gut funktionieren, da es immer dann aufgerufen wird, wenn die Verbindung beendet wird. Dies ist zuverlässiger als ein Fehler, da nicht alle Verbindungsunterbrechungen zu einem Fehler führen.
Ich persönlich benutze Socket.IO , es ermöglicht die bidirektionale, ereignisbasierte Echtzeitkommunikation zwischen Client und Server.
Es ist ereignisgesteuert. Ereignisse wie
on connection :: socket.on('conection',callback);
und
on disconnect :: socket.on('disconnect',callback);
sind mit socket.io integriert, damit Sie Ihre Verbindungsprobleme lösen können. Ziemlich viel sehr einfach zu bedienen, besuchen Sie ihre Website, wenn Sie interessiert sind.
Ich verwende ein zweischichtiges Schema auf dem Client: abstract-wrapper + websocket-client:
Die Verantwortlichkeiten des websocket-Clients interagieren mit einem Server, stellen die Verbindung wieder her und stellen Schnittstellen (event-emitter und einige Methoden) für abstract-wrapper bereit.
Der abstract-wrapper ist ein High-Level-Layer, der mit websocket-client interagiert, seine Ereignisse abonniert und aggregierende Daten , wenn die Verbindung vorübergehend fehlgeschlagen ist. Der abstract-wrapper kann jede Schnittstelle wie Promise, EventEmitter usw. auf die Anwendungsebene stellen.
Auf der Anwendungsebene arbeite ich nur mit abstract-wrapper und mache mir keine Gedanken über Verbindungs- oder Datenverluste. Zweifellos ist es eine gute Idee, hier Informationen über den Status der Verbindungs- und Datensendebestätigung zu haben, weil es nützlich ist.
Wenn es notwendig ist, kann ich zum Beispiel einen Code bereitstellen
Dies ist anscheinend ein Serverproblem, kein Problem im Client.
Ich weiß nicht, wie der Server hier aussieht. Aber das war ein großes Problem für mich in der Vergangenheit, als ich an einem Websocket-basierten Projekt arbeitete. Die Verbindung würde kontinuierlich unterbrochen.
Also habe ich einen Websocket-Server in Java erstellt, und das hat mein Problem gelöst.
websockets hängen von vielen Einstellungen ab. Wenn Sie Servlets verwenden, sind die Einstellungen des Servlet-Containers wichtig. Wenn Sie php usw. verwenden, sind Apache- und PHP-Einstellungen wichtig, zum Beispiel wenn Sie einen Websocket-Server in php und php erstellen hat eine Standardzeit von 30 Sekunden, wird nach 30 Sekunden unterbrochen. Wenn keep-alive nicht gesetzt ist, bleibt die Verbindung nicht bestehen.
Was Sie als schnelle Lösung tun können, ist
Ich denke, das würde helfen
Tags und Links javascript websocket