wake-up-neo.net

Senden des Ping- / Pong-Frames des Websockets vom Browser

Ich lese ständig über Ping/Pong-Nachrichten in Websockets, um die Verbindung aufrechtzuerhalten, bin mir aber nicht sicher, was sie sind. Handelt es sich um einen bestimmten Rahmentyp? (In chrome bezogen auf Ping-Pong) werden für ein JavaScript-WebSocket-Objekt keine Methoden angezeigt.) Oder handelt es sich nur um ein Entwurfsmuster (z. B. ich sende buchstäblich "Ping" oder einen anderen String) an den Server und lassen Sie ihn antworten.) Hat Ping-Pong überhaupt etwas mit Fortsetzungsrahmen zu tun?

Der Grund, den ich frage, ist, dass ich ein python= Framework verwende, das hinter Mongrel2 ausgeführt wird. Daher frage ich mich, ob es eine Möglichkeit gibt, Mongrel2 eine bestimmte Ping-/Pong-Nachricht zu senden, die es auffordert, sie beizubehalten Die Verbindung läuft, ohne dass sich meine python App darum kümmern muss. Analog zu einer separaten HTTP-Methode, denke ich. Und ich stelle mir vor, dass ein dedizierter Ping/Pong-Nachrichtenrahmen einfacher sein könnte ( weniger Last auf Server und Netzwerk) als die Zeichenfolge "ping", obwohl das wahrscheinlich nicht allzu wichtig wäre.

EDIT: Ich habe mir gerade RFC 6455 angesehen und es sieht so aus, als ob Ping und Pong definitiv Kontrollrahmentypen mit ihren eigenen Opcodes sind. Wie sende ich einen Ping-Frame aus Javascript in Chrome?

115
danny

Es gibt keine Javascript-API, um Ping-Frames zu senden oder Pong-Frames zu empfangen. Dies wird entweder von Ihrem Browser unterstützt oder nicht. Es gibt auch keine API zum Aktivieren, Konfigurieren oder Erkennen, ob der Browser Ping-/Pong-Frames unterstützt und verwendet. Es gab Diskussion über das Erstellen einer Javascript-Ping/Pong-API dafür. Es besteht die Möglichkeit, dass Pings in Zukunft konfiguriert/erkannt werden können, aber es ist unwahrscheinlich, dass Javascript Ping-/Pong-Frames direkt senden und empfangen kann.

Wenn Sie jedoch sowohl den Client- als auch den Server-Code steuern, können Sie problemlos Ping/Pong-Unterstützung auf einer höheren Ebene hinzufügen. Sie benötigen eine Art Nachrichtentyp-Header/Metadaten in Ihrer Nachricht, wenn Sie diese noch nicht haben, aber das ist ziemlich einfach. Sofern Sie nicht vorhaben, Pings hunderte Male pro Sekunde zu senden oder Tausende von Clients gleichzeitig zu haben, ist der Aufwand für die Selbstabfertigung sehr gering.

105
kanaka

Ping soll nur vom Server zum Client gesendet werden, und der Browser sollte so schnell wie möglich automatisch mit Pong OpCode antworten. Darüber müssen Sie sich also auf höherer Ebene keine Gedanken machen.

Obwohl dies nicht bei allen Browsern der Fall ist, kann es bei der Implementierung eines solchen Mechanismus zu Unterschieden kommen, und es kann sogar bedeuten, dass keine Pong-Antwortfunktionalität vorhanden ist. Ich persönlich verwende jedoch Ping/Pong und habe noch nie einen Client gesehen, der diesen OpCode-Typ nicht implementiert und bei der clientseitigen Implementierung auf niedriger Ebene automatisch reagiert.

21
moka