探索 WebSocket

Home PDF

Dieser Blogbeitrag wurde mit Unterstützung von ChatGPT-4o erstellt.


Einführung

Hallo zusammen, ich bin Li Zhiwei. Als Gründer und CTO der CodeReview-Plattform sowie ehemaliger Ingenieur bei LeanCloud, habe ich umfangreiche Erfahrungen mit WebSocket, insbesondere bei der Entwicklung von IM SDKs.

Die Bedeutung von WebSocket

WebSocket ist ein Protokoll, das einen vollständig duplexfähigen Kommunikationskanal über eine einzelne TCP-Verbindung bereitstellt. Es wird häufig in modernen Anwendungen eingesetzt, die Echtzeit-Interaktion erfordern, wie z.B. Instant Messaging, Echtzeit-Kommentare, Mehrspieler-Spiele, kollaborative Bearbeitung und Echtzeit-Aktienkurse.

Moderne Anwendungen von WebSocket

WebSocket wird in folgenden Bereichen häufig eingesetzt:

Die Entwicklung von WebSocket

Polling: Der Client fragt den Server häufig nach Updates an. Long Polling: Der Server hält die Anfrage offen, bis neue Informationen verfügbar sind. HTTP-Zweikanalverbindung: Erfordert mehrere Verbindungen zum Senden und Empfangen, und jede Anfrage enthält HTTP-Header. Einzelne TCP-Verbindung (WebSocket): Überwindet die Einschränkungen der HTTP-Zweikanalverbindung und bietet höhere Echtzeitfähigkeiten und geringere Latenz.

WebSocket auf iOS implementieren

Beliebte iOS WebSocket-Bibliotheken:

Verwendung von SRWebSocket

  1. Initialisierung und Verbindung:
    SRWebSocket *webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://echo.websocket.org"]]];
    webSocket.delegate = self;
    [webSocket open];
    
  2. Nachricht senden:
    [webSocket send:@"Hello, World!"];
    
  3. Nachrichten empfangen: Implementieren Sie die SRWebSocketDelegate-Methoden, um eingehende Nachrichten und Ereignisse zu verarbeiten.

  4. Fehlerbehandlung und Ereignisbenachrichtigung: Behandeln Sie Fehler angemessen und benachrichtigen Sie Benutzer über Verbindungsprobleme.

Detaillierte Erklärung des WebSocket-Protokolls

WebSocket läuft auf TCP und führt mehrere Verbesserungen ein:

Das Kernkonzept des WebSocket-Protokolls

1. Handshake: Der WebSocket-Handshake verwendet den HTTP-Upgrade-Mechanismus:

2. Datenübertragung: WebSocket-Frames können UTF-8-Text, Binärdaten und Steuerframes wie Schließen, Ping und Pong enthalten.

3. Sicherheit: Der Browser fügt automatisch den Origin-Header hinzu, der von anderen Clients nicht gefälscht werden kann.

WebSocket-URI

WebSocket-Frame-Protokoll

Rahmenstruktur:

Mask Key: Wird verwendet, um Man-in-the-Middle-Angriffe zu verhindern, indem die Frames des Clients maskiert werden.

Handshake beenden

Schließrahmen (Close Frame):

Beispiel

Beispiel 1: Einzelner ungemaskierter Textnachrichten-Frame

0x81 0x05 0x48 0x65 0x6c 0x6c 0x6f

Enthält “Hello”

Beispiel 2: Maskierte Textnachricht in einem Einzelrahmen

0x81 0x85 0x37 0xfa 0x21 0x3d 0x7f 0x9f 0x4d 0x51 0x58

Enthält “Hello” mit einem Maskierungsschlüssel.

Beispiel 3: Fragmentierte unverschlüsselte Textnachricht

0x01 0x03 0x48 0x65 0x6c
0x80 0x02 0x6c 0x6f

Die Fragmente enthalten die beiden Frames “Hel” und “lo”.

Fortgeschrittene Themen

Masking und Demasking:

Fragmentierung:

Steuerungsrahmen:

Erweiterbarkeit

Erweiterte Daten können vor den Anwendungsdaten im Nachrichtenkörper platziert werden:

Senden:

Schließen des Handshakes:

Verbindung schließen:

Referenzen

Danksagung

Vielen Dank für Ihre Aufmerksamkeit. Wenn Sie weitere Fragen oder Diskussionen haben, können Sie mich gerne auf GitHub oder Weibo kontaktieren.


Back 2025.01.18 Donate