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
- Öffnen Sie WebSocket.
- Geben Sie unter URL die Adresse ein:
ws://127.0.0.1:9001/oderwss://example.com/socket. - Verlangt der Dienst sie, geben Sie Subprotokolle ein und fügen Header hinzu (einen
Authorization-Header mit einem Token, ein Cookie). - 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.
| Feld | Was | Standard |
|---|---|---|
| URL | ws:// oder wss://, ein Host, ein optionaler Port (80 für ws, 443 für wss) und ein Pfad | ws://127.0.0.1:9001/ |
| Subprotokolle | Anzubietende Subprotokolle, durch Kommas getrennt, in der Reihenfolge der Vorliebe; der Server wählt eines. Ein Name hat keine Leerzeichen, Kommas oder Schrägstriche. | keine |
| Header | Zusä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:
| Element | Was |
|---|---|
| Zustand | offen, oder, sobald sie endet: von Ihnen oder vom Server geschlossen, mit dem Schließcode, oder abgebrochen, wenn die Leitung ohne ein Schließen abbrach |
| Grund | Der Grund, den die schließende Seite nannte, falls es einen gab |
| Subprotokoll | Das Subprotokoll, das der Server wählte, oder — |
| Gegenstelle | IP:port des Servers |
| Upgrade | Wie 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
- Wählen Sie unter Nachricht Text oder Binär (Hex).
- Schreiben Sie die Nachricht. Schreiben Sie für Binärdaten die Bytes als Paare von Hex-Ziffern:
de ad be ef. - 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:
| Zusammenfassung | Was |
|---|---|
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 reason | Ein 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:
| Schritt | Was 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 senden | Sendet eine Text- oder Binärnachricht über eine Verbindung. Details |
| Auf WebSocket warten | Wartet 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ßen | Schließ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.
signallab send ws ws://127.0.0.1:9001/ --text '{"type":"ping"}' --expect pongDer Handshake und das Gesendete gehen an die Standardfehlerausgabe, die Antwort an die Standardausgabe:
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 address | Die URL beginnt nicht mit ws:// oder wss:// oder hat keinen Host. |
… answered HTTP n instead of switching to WebSocket | Der 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 offered | Sie 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 name | Ein Name mit einem Leerzeichen, einem Komma oder einem Schrägstrich. |
The header … cannot be sent with the upgrade | Ein Header-Name oder -Wert mit Zeichen, die HTTP nicht erlaubt. |
… refused the connection | Auf diesem Port empfängt nichts. |
A secure connection to … could not be made | Dem Zertifikat wird hier nicht vertraut, oder TLS schlug fehl. Siehe Sichere Verbindungen. |
The connection with … broke: the server did not keep to the WebSocket protocol | Der Server hat etwas gesendet, das kein gültiges WebSocket ist. |
A WebSocket message is limited to … bytes | Der Server hat eine Nachricht über 16 MiB gesendet, was die Verbindung beendet. |
Too long: at most 16777216 | Die Nachricht, die Sie senden wollten, ist über 16 MiB. Nichts wurde gesendet; die Verbindung ist offen. |
Jede Fehlermeldung steht unter Fehlermeldungen.