WebSocket

Dies ist eine experimentelle Technologie
Da diese Technologie noch nicht definitiv implementiert wurde, sollte die Browser Kompatibilität beachtet werden. Es ist auch möglich, dass der Syntax in einer späteren Spezifikation noch geändert wird.

Das WebSocket-Objekt bietet die API für das Erstellen und Verwalten einer WebSocket-Verbindung zu einem Server, ebenso dient es auch dem Senden und dem Empfangen von Daten auf der Verbindung.

Der WebSocket-Konstruktor akzeptiert einen benötigten und einen optionalen Parameter:

WebSocket WebSocket(
  in DOMString url,
  in optional DOMString protocols
);

WebSocket WebSocket(
  in DOMString url,
  in optional DOMString[] protocols
);
url
Die URL mit der sich das WebSocket verbinden soll; dies sollte die URL sein, auf welcher der WebSocket Server antworten wird.
protocols Optional
Entweder ein einzelnes Protokol als String oder ein Array aus Protokol-Strings. Diese Strings werden genutzt um Sub-Protokolle zu indizieren, sodass ein einzelner Server mehrere WebSocket Sub-Protokolle implementieren kann (Beispielsweiße kann ein Server abhängig vom protocol verschiedene Interaktionen mit dem Client handeln). Falls du kein Protokoll angibst, wird ein leerer String verwendet.

Der Konstruktur kann folgende Exceptions werfen:

SECURITY_ERR
Der Port auf dem man die Verbindung aufbauen will, ist blockiert worden.

Methoden Übersicht

void close(in optional unsigned long code, in optional DOMString reason);
void send(in DOMString data);

Attribute

Attribut Typ Beschreibung
binaryType DOMString Ein String indiziert den Typ der Binärdaten, die von der Verbindung übertragen werden. Dies sollte entweder "blob" sein, falls DOM-Objekte Blob genutzt werden oder "arraybuffer" falls ArrayBuffer-Objekte genutzt werden.
bufferedAmount unsigned long Die Anzahl der Bytes der Daten, welche bereits durch Aufrufe von send() gebuffert wurden, allerdings noch nicht über das Netzwerk versand wurden. Dieses Feld setzt sich nicht auf Null zurück, wenn die Verbindung beendet wurde; falls du weiterhin send() aufrufst, wird dieses Feld weiterhin ansteigen. Read only.
extensions DOMString Die Erweiterungen, die von dem Server gewählt wurden. Aktuell ist dies nur ein leerer String oder eine Liste von Erweiterungen, die von der Verbindung verhandelt wurden.
onclose EventListener Ein Event-Listener welcher aufgerufen wird, wenn der readyState der WebSocket-Verbindung auf CLOSED wechselt. Den Listener erreicht ein CloseEvent welches "close" heißt.
onerror EventListener Ein Event-Listener welcher bei Fehlern aufgerufen wird. Dies ist ein einfaches Event welches "error" genannt wird.
onmessage EventListener Ein Event-Listener welcher aufgerufen wird, wenn eine Nachricht vom Server empfangen wird. Den Listener erreicht ein MessageEvent welches "message" heißt.
onopen EventListener Ein Event-Listener welcher aufgerufen wird, wenn der readyState der WebSocket-Verbindung auf OPEN wechselt; dies indiziert, dass die Verbindung bereit ist, dass man Daten versenden und empfangen kann. Dieses Event ist eine einfaches Event, es heißt "open".
protocol DOMString Ein String welcher dne Namen des Sub-Protokolls nennt, welches vom Server ausgewählt wurde; dieses Protokoll wird eines sein, welches in den Strings des protocols-Parameter beim Erstellen des WebSocket-Objekt angegeben wurde.
readyState unsigned short Der aktuelle Status der Verbindung; dies ist einer der Ready state Konstanten. Read only.
url DOMString Die URL welche beim Konstruktor angegeben wurde. Dies ist immer die absolute URL. Read only.

Konstanten

Ready state Konstanten

Diese Konstanten werden vom readyState Attribut genutzt, um den Status der WebSocket-Verbindung zu beschreiben.

Konstante Inhalt Beschreibung
CONNECTING 0 Die Verbindung ist noch nicht hergestellt.
OPEN 1 Die Verbindung ist hergestellt und bereit darüber zu kommunizieren.
CLOSING 2 Die Verbindung ist im Prozess des Schließens.
CLOSED 3 Die Verbindung ist geschlossen oder konnte nicht hergestellt werden.

Methoden

close()

Schließt die WebSocket-Verbindung oder den Verbindungsversuch, falls dieser gerade existiert. Falls die Verbindung bereits CLOSED ist, macht diese Methode überhaupt nichts.

void close(
  in optional unsigned short code,
  in optional DOMString reason
);
Parameter
code Optional
Eine Nummer welche den Status-Code setzt, warum die Verbindung geschlossen wird. Falls dieser Parameter nicht gesetzt wird, wird er auf 1000 (welcher bei einer normalen Verbindung "Übertragung vollständig" bedeutet) gesetzt.
reason Optional
Ein vom Menschen lesbarer String, welcher erklärt, warum die Verbindung geschlossen wurde. Dieser Text darf nicht länger als 123 Bytes UTF-8-Text sein. Dabei heißt dies nicht unbedingt, dass es auch 123 Zeichen sind.
Exceptions thrown
INVALID_ACCESS_ERR
Ein ungültiger code wurde gesetzt.
SYNTAX_ERR
Der reason-String ist zu lang oder enthält ungültige Zeichen.
Notizen

In Gecko vor Version Gecko 8.0 unterstützte diese Methode überhaupt keine Parameter. (Firefox 8.0 / Thunderbird 8.0 / SeaMonkey 2.5).

send()

Überträgt Daten zu dem Server über die WebSocket-Verbindung.

void send(
  in DOMString data
);

void send(
  in ArrayBuffer data
);

void send(
  in Blob data
); 
Parameter
data
Ein String der zum Server geschickt wird.
Exceptions thrown
INVALID_STATE_ERR
Die Verbindung hat aktuell nicht den Status OPEN.
SYNTAX_ERR
data enthält ungültige Zeichen.
Erläuterung

Notiz: Geckos Implementierung von der send() Methode unterscheidet sich ein wenig von der Spezifikation in Gecko 6.0; Gecko gibt einen boolean zurück, welcher darüber auskunft gibt, ob die Verbindung immer noch hergestellt ist oder nicht (und, durch Erweiterung, dass die Daten erfolgreich gesammelt oder übertragen wurden); dies wurde in Gecko 8.0 korrigiert.

In Gecko 11.0 ist die Unterstützung für  ArrayBuffer implementiert aber nicht die für Blob Datentypen.

Weiterführendes

Browser Kompatibilität

Feature Chrome Firefox (Gecko) Internet Explorer Opera Safari
Basic support (Ja) 4.0 (2.0) (Ja) (Ja) ?
Sub-protocol support ? 6.0 (6.0) ? ? ?
Feature Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Basic support ? 7.0 (7.0) ? ? ?
Sub-protocol support ? 7.0 (7.0) ? ? ?

Gecko Notizen

In Gecko 6.0 ist der Konstruktur mit einem Prefix ausgestattet; du must MozWebSocket() benutzen:

var mySocket = new MozWebSocket("http://www.example.com/socketserver");

Das extensions-Attribut wurde bis Gecko 8.0 nicht unterstützt.

Notiz: Vor Gecko 11.0 ausgehende Nachrichten welche mit der send() Methode versendet wurden, waren auf 16 MB begrenzt. Jetzt können sie bis zu 2 GB wachsen.

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: firefligher
 Zuletzt aktualisiert von: firefligher,