9. Extensions (Erweiterungen)
Das WebSocket-Protokoll bietet einen Erweiterungsmechanismus, der das Hinzufügen zusätzlicher Funktionen ermöglicht.
9.1 Negotiating Extensions (Erweiterungen aushandeln)
Erweiterungen werden während des Handshakes über den Sec-WebSocket-Extensions-Header ausgehandelt.
Client fordert Erweiterung an
GET /chat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==
Sec-WebSocket-Version: 13
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Server-Antwort
HTTP/1.1 101 Switching Protocols
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=
Sec-WebSocket-Extensions: permessage-deflate
Erweiterungsformat
extension = extension-token *( ";" extension-param )
extension-param = token [ "=" (token | quoted-string) ]
9.2 Known Extensions (Bekannte Erweiterungen)
permessage-deflate (RFC 7692)
Die am häufigsten verwendete Erweiterung, die Nachrichtenkomprimierung bietet.
Vorteile:
- Reduziert Bandbreitennutzung
- Geeignet für Textdaten
Nachteile:
- Erhöht CPU-Overhead
- Kann Latenz erhöhen
Verwendungsbeispiel (Node.js):
const WebSocket = require('ws');
const wss = new WebSocket.Server({
port: 8080,
perMessageDeflate: {
zlibDeflateOptions: {
chunkSize: 1024,
memLevel: 7,
level: 3
},
zlibInflateOptions: {
chunkSize: 10 * 1024
},
clientNoContextTakeover: true,
serverNoContextTakeover: true,
serverMaxWindowBits: 10,
concurrencyLimit: 10,
threshold: 1024 // Nur Nachrichten größer als 1KB komprimieren
}
});
Andere Erweiterungen
- permessage-bzip2: Bzip2-Kompression
- multiplexing: Multiplexing (Entwurf)
- Benutzerdefinierte Erweiterungen
Erweiterungsentwicklung
Bei der Entwicklung benutzerdefinierter Erweiterungen:
- Erweiterungsname definieren
- Parameter definieren
- Angeben, wie Frame-Struktur zu ändern ist
- Handshake-Aushandlung implementieren
- Erweiterung registrieren
Referenzlinks
- Vorheriges Kapitel: 8. Error Handling (Fehlerbehandlung)
- Nächstes Kapitel: 10. Security Considerations (Sicherheitsüberlegungen)
- RFC 7692: WebSocket-Komprimierungserweiterungen