Zum Inhalt springen

WebSocket ​

Die Ansicht WebSocket ist ein WebSocket-Client: Sie öffnet eine Verbindung zu einem Dienst — mit den Headern und Subprotokollen, die der Dienst erwartet —, sendet Text oder Bytes und listet jede Nachricht auf, die kommt und geht, die neueste zuletzt. Nutzen Sie sie, um eine Live-API, eine Steueroberfläche oder ein Gerät, das WebSocket spricht, auszuprobieren, bevor Sie es in einem Experiment skripten.

Verbinden ​

  1. Öffnen Sie WebSocket.
  2. Geben Sie unter URL die Adresse ein: ws://127.0.0.1:9001/ oder wss://example.com/socket.
  3. Verlangt der Dienst sie, geben Sie Subprotokolle ein und fügen Header hinzu (einen Authorization-Header mit einem Token, ein Cookie).
  4. Drücken Sie Verbinden. Während das Upgrade läuft, zeigt die Schaltfläche Wird verbunden…; ist es fertig, sind die Felder gesperrt und die Schaltfläche wird zu Trennen.
FeldWasStandard
URLws:// oder wss://, ein Host, ein optionaler Port (80 für ws, 443 für wss) und ein Pfadws://127.0.0.1:9001/
SubprotokolleAnzubietende Subprotokolle, durch Kommas getrennt, in der Reihenfolge der Vorliebe; der Server wählt eines. Ein Name hat keine Leerzeichen, Kommas oder Schrägstriche.keine
HeaderZusätzliche Header für die Upgrade-Anfrage; + Header fügt eine Zeile hinzu. Eine Zeile ohne Namen entfällt.keine

Das Verbinden — das Auflösen des Namens, die TCP-Verbindung, TLS für wss:// und das Upgrade — dauert höchstens 10 Sekunden. Die URL bleibt erhalten, wenn Sie die Ansicht wechseln und wenn Sie die App neu starten; Header und Subprotokolle nicht.

Verbunden zeigt der Bereich:

ElementWas
Zustandoffen, oder, sobald sie endet: von Ihnen oder vom Server geschlossen, mit dem Schließcode, oder abgebrochen, wenn die Leitung ohne ein Schließen abbrach
GrundDer Grund, den die schließende Seite nannte, falls es einen gab
SubprotokollDas Subprotokoll, das der Server wählte, oder —
GegenstelleIP:port des Servers
UpgradeWie lange das Verbinden und das Upgrade dauerten, in Millisekunden

Die Verbindung ist ein Job: Sie erscheint in der Leiste der Konsole und kann auch dort gestoppt werden.

Sichere Verbindungen ​

wss:// vertraut denselben Zertifikaten wie HTTPS auf diesem System: Ein Server, dessen Zertifikat dieses System nicht vertraut (selbst ausgestellt, abgelaufen, ein anderer Name), wird mit "A secure connection to … could not be made" abgelehnt. Es gibt keine Einstellung, die Prüfung zu überspringen.

Eine Nachricht senden ​

  1. Wählen Sie unter Nachricht Text oder Binär (Hex).
  2. Schreiben Sie die Nachricht. Schreiben Sie für Binärdaten die Bytes als Paare von Hex-Ziffern: de ad be ef.
  3. Drücken Sie Senden, oder Ctrl+Enter in der Nachricht.

Eine Nachricht ist höchstens 16 MiB groß (16.777.216 Bytes, bei Binärdaten als Bytes gezählt, nicht als Hex-Ziffern), dieselbe Grenze wie für eine eintreffende Nachricht und für den Schritt WebSocket senden. Eine längere wird mit Too long: at most 16777216 abgelehnt, bevor etwas gesendet wird, und die Verbindung bleibt offen.

Ist eine Textnachricht JSON, legt JSON formatieren sie mit Einrückungen zurecht, bevor Sie sie senden. Die Nachricht bleibt erhalten, wenn Sie die Ansicht wechseln und wenn Sie die App neu starten.

Die Nachrichten lesen ​

Nachrichten listet auf, was empfangen (↓) und gesendet (↑) wurde, die neueste zuletzt, mit der Zeit, dem Anfang der Nachricht (300 Zeichen) und ihrer Größe; eine Binärnachricht zeigt ihre Bytes in Hex und ist mit binär markiert. Über der Liste steht, wie viele empfangen und gesendet wurden. Die Liste folgt neuen Nachrichten, solange sie ans Ende gescrollt ist; scrollen Sie hoch, bleibt sie, wo Sie sind.

Klicken Sie auf eine Nachricht, um sie ganz unter der Liste zu sehen: JSON zurechtgelegt, Binärdaten als Hex. Als Nachricht bearbeiten kopiert sie in das Nachrichtenfeld, um sie erneut zu senden oder zu ändern. Eine sehr lange Nachricht wird teilweise gezeigt — Text bis 64 KiB, Binärdaten bis 4096 Bytes — und kann dann nicht kopiert werden, da sie abgeschnitten gesendet würde.

Die Ansicht behält die neuesten 2000 Nachrichten; Leeren leert die Liste. Sendet ein Dienst schneller, als die Ansicht aufnehmen kann — mehr als 2000 in einer Zehntelsekunde —, werden die ältesten davon aus der Liste weggelassen und als „nicht angezeigt" gezählt. Der Inspektor hat sie trotzdem, solange der Mitschnitt läuft.

Schließen ​

Trennen sendet ein Schließen-Frame mit Code 1000 (normal) und wartet bis zu 2 Sekunden auf die Antwort des Servers, bevor sie auflegt. Der Zustand liest sich dann als geschlossen mit 1000. Schließt der Server, zeigt der Zustand seinen Code und Grund; bricht die Verbindung ohne ein Schließen-Frame ab, liest sie sich als abgebrochen, und die Konsole sagt, warum.

Signal Lab beantwortet die Pings des Servers selbst; Pings und Pongs werden nicht aufgelistet. Eine Verbindung endet auch, wenn eine Nachricht über 16 MiB eintrifft oder wenn das Senden einer solchen länger als 10 Sekunden dauert, weil der Server aufgehört hat zu lesen. (Eine selbst gesendete über 16 MiB wird abgelehnt und beendet nichts.)

Im Inspektor ​

Läuft der Mitschnitt, erscheint der Verkehr der Verbindung mit dem Protokoll ws und der Quelle websocket:

ZusammenfassungWas
CONNECT ws://… (subprotocol)Die Verbindung wurde geöffnet
TEXT …Eine Textnachricht und ihr Anfang
BINARY n B …Eine Binärnachricht, ihre Größe und die ersten 16 Bytes
CLOSE code reasonEin Schließen-Frame, gesendet oder empfangen

Jeder Nachrichten-Frame behält seine Bytes. Ist der Verkehr leicht, wird jede Nachricht mitgeschnitten; eine stark belastete Verbindung wird auf 200 Frames pro Sekunde begrenzt, und der nächste mitgeschnittene Frame sagt, wie viele weggelassen wurden (+n not shown). Siehe Inspektor.

In Experimenten ​

Vier Schritte skripten ein WebSocket-Gespräch. Eine Verbindung wird von einem Schritt geöffnet und von den anderen benannt:

SchrittWas er tut
WebSocket verbindenÖffnet eine Verbindung für den Rest des Durchlaufs. Seine URL und Header nehmen {{templates}}, sodass ein früher extrahierter Token hineingehen kann. Details
WebSocket sendenSendet eine Text- oder Binärnachricht über eine Verbindung. Details
Auf WebSocket wartenWartet auf eine Nachricht, deren Nutzdaten passen, wie es Auf UDP warten tut; JSON-Nachrichten lassen sich danach Feld für Feld lesen. Details
WebSocket schließenSchließt eine Verbindung mit einem Schließen-Handshake: Code 1000 oder 3000–4999 für einen eigenen der Anwendung und ein Grund von bis zu 123 Bytes. Details

Eine Verbindung, die der Durchlauf beim Ende — oder beim Stoppen — noch offen hat, wird ordentlich geschlossen. Die Vorlage WebSocket-Echo ist ein ausgearbeitetes Beispiel.

Von der Kommandozeile ​

signallab send ws führt einen Austausch aus: verbinden, eine Nachricht senden, auf die Antwort warten, wenn Sie eine anfordern, schließen.

bash
signallab send ws ws://127.0.0.1:9001/ --text '{"type":"ping"}' --expect pong

Der Handshake und das Gesendete gehen an die Standardfehlerausgabe, die Antwort an die Standardausgabe:

text
Connected to ws://127.0.0.1:9001/ in 4 ms
Sent 15 bytes
{"type":"pong"}

--hex sendet eine Binärnachricht; -H fügt einen Header hinzu und --protocol bietet ein Subprotokoll an (beide wiederholbar). --expect TEXT, --expect-regex RE oder --wait (irgendeine Nachricht) sagen, auf welche Antwort gewartet wird, für --timeout Millisekunden (standardmäßig 2000). Es endet mit 1, wenn die Antwort nicht kommt oder die Verbindung fehlschlägt. Siehe Kommandozeile.

Probleme ​

Was Sie sehenÜbliche Ursache
… is not a WebSocket addressDie URL beginnt nicht mit ws:// oder wss:// oder hat keinen Host.
… answered HTTP n instead of switching to WebSocketDer Server hat das Upgrade abgelehnt: ein falscher Pfad (404), ein fehlender oder falscher Token (401, 403). Der Anfang seiner Antwort steht unter den technischen Details.
… did not take any of the subprotocols offeredSie haben Subprotokolle angeboten, und der Server hat keines gewählt, oder er hat mit einem geantwortet, das Sie nicht angeboten haben.
… is not a subprotocol nameEin Name mit einem Leerzeichen, einem Komma oder einem Schrägstrich.
The header … cannot be sent with the upgradeEin Header-Name oder -Wert mit Zeichen, die HTTP nicht erlaubt.
… refused the connectionAuf diesem Port empfängt nichts.
A secure connection to … could not be madeDem Zertifikat wird hier nicht vertraut, oder TLS schlug fehl. Siehe Sichere Verbindungen.
The connection with … broke: the server did not keep to the WebSocket protocolDer Server hat etwas gesendet, das kein gültiges WebSocket ist.
A WebSocket message is limited to … bytesDer Server hat eine Nachricht über 16 MiB gesendet, was die Verbindung beendet.
Too long: at most 16777216Die Nachricht, die Sie senden wollten, ist über 16 MiB. Nichts wurde gesendet; die Verbindung ist offen.

Jede Fehlermeldung steht unter Fehlermeldungen.