PehBehBeh

Erfahrungen eines Hobby-Webentwicklers

Tutorial: WebSockets mit JavaScript und PHP – Teil 1: Grundlagen und das Interface

| 13 Kommentare

Dies ist der erste Teil einer neuen Artikel-Serie rund um WebSockets. Im ersten Teil möchte ich euch die Grundlagen von WebSockets näher bringen. Die nächsten Teile handeln von der Implementierung mit JavaScript und PHP.


Was sind WebSockets?

WebSockets ist ein Netzwerkprotokoll, welches mit HTML5 eingeführt wurde und momentan nur von Google Chrome unterstützt wird. Es dient dazu die Kommunikation zwischen einem Client und dem Server in einem Webbrowser zu optimieren.

Bisher mussten Antworten vom Server immer vom Client gefordert werden (Pull-Technologie). Mit WebSockets ist es nun Möglich eine bidirektionale Verbindung zwischen Client und Server herzustellen, sodass der Server jederzeit Nachrichten an den Client senden kann (Push-Technologie).

Es gibt zwar schon zahlreiche Möglichkeiten die Funktionalität eines WebSockets nachzuahmen (Bsp.: AJAX-Longpolling), jedoch bringen diese Hacks immer einen gewissen Overhead durch das HTTP-Protokoll mit sich. WebSockets besitzen diesen Nachteil nicht.

Das WebSocket-Interface

Werfen wir einen Blick auf das WebSocket-Interface:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[Constructor(in DOMString url, in optional DOMString protocol)]
interface WebSocket {
    readonly attribute DOMString URL;
 
    // ready state
    const unsigned short CONNECTING = 0;
    const unsigned short OPEN = 1;
    const unsigned short CLOSING = 2;
    const unsigned short CLOSED = 3;
    readonly attribute unsigned short readyState;
    readonly attribute unsigned long bufferedAmount;
 
    // networking
    attribute Function onopen;
    attribute Function onmessage;
    attribute Function onerror;
    attribute Function onclose;
    boolean send(in DOMString data);
    void close();
};
WebSocket implements EventTarget;

Eigenschaften

  • readyState – Status der Verbindung (0=connecting, 1=open, 2=closing, 3=closed)
  • bufferedAmountBytes, die in der Warteschlange stehen

Methoden

  • send – eine Nachricht an den Server senden
  • close – die Verbindung schließen

Event-Handler:

  • onopen – bei Öffnen der Verbindung
  • onmessage – bei Empfangen einer Nachricht
  • onerror – bei Auftreten eines Fehlers
  • onclose – bei Schließen der Verbindung

Ausblick

Mit dem Wissen über dieses Interface seid ihr bestens gerüstet für die nächsten Teile dieser Artikel-Serie, in denen wir eine vollständige Implementierung von WebSockets mit JavaScript und PHP erarbeiten und diese auf eine funktionsfähige Chat-Anwendung erweitern.

Dir hat der Artikel gefallen?
Dann abonniere doch den RSS-Feed!

13 Kommentare

  1. Bin schon gespannt, gute Idee das Thema mal ausführlicher zu behandeln, auch wenn es noch Monate dauert bis es final und verbreitet ist. Aber für interaktive Webseiten wird es ein “must-have” sein denk ich. Firefox wird es mit dem Release von 3.7 rausbringen.

  2. Pingback: Tweets die Tutorial: WebSockets mit JavaScript und PHP – Teil 1: Grundlagen und das Interface - pehbehbeh erwähnt -- Topsy.com

  3. Pingback: Linkpool Nummer 6 | PHP Gangsta - Der PHP Blog

  4. Für alle, die es gern out of the box haben, die Arbeit hat sich schon jemand gemacht:
    http://mylittlehacks.appspot.com/phpwebsocket
    ein funktionierender Websocket-Server in PHP inklusive einfachem Chatbot. Die Demo zu einem multiuser-chat auszubauen dürfte recht einfach sein.

    Was ich an Websockets sehr toll fand: es ist überraschend einfach! Der Javascript-Teil, der benötig wird um mit Websockets zu arbeiten ist fast schon unverschämt kurz (4 Zeilen) und sehr logisch zu verwenden. Eine Technologie, die unbedingt so schnell wie möglich in alle Browser kommen sollte!

  5. Hey Lukas,
    auf die vorhandenen Libraries werde ich im nächsten Teil eingehen. Das Tutorial werde ich darauf aufbauen.

    Die Einfachheit ist wirklich genial. Hoffen wir, dass diese geniale Technologie möglichst schnell massentauglich wird…

  6. ach, sorry ich wollte dir nicht vorgreifen :-)
    ein Artikel, den ich neulich irgendwo gelesen habe (weiß leider nichtmehr wo) meinte, dass es wohl in der nächsten Zeit so sein wird, dass für Browser, die Websockets nicht unterstützen, eine langsame Fallback-Variante (Long polling, never ending iframes o.ä.) zur Verfügung stehen wird. Wenn das so in Javascript Frameworks Einzug hält, wäre die ganze Push-Geschichte langsam wirklich attraktiv – denn für den intensiven Einsatz sind die bisherigen Krücken halt doch zu langsam/unperformant, als Fallback hingegen würds ja reichen… mir kribbelts schon in den Fingern, damit was tolles zu machen!

  7. Interessanter Artikel, ich würde mich sehr über eine Fortsetzung über dieses Thema freuen :) So viele gute Artikel gibt es jedenfalls noch nicht dazu – noch weniger deutschsprachige *grins*.

  8. … und wie geht’s weiter? Bin gespannt! :)

  9. Ich habe aufgrund eines Projektes momentan nur extrem wenig Zeit zum schreiben.

    Aber es wird bald weitergehen!

  10. echt geil, danke dass du hier diesen thread gestartet hast.
    die technologie wird sich durchsetzen und es ist schön, wenn eifrige entwickler vorlegen :)

  11. Hier ein Link zu einer Seite, die Websockets produktiv einsetzt: http://www.jandaya.de

  12. Hab Websockets bei mir eingerichtet (als Apache2-Module unter Python)
    Hey wisst ihr, warum mein Apache2 den Stream nach 16 Sekunden schließt?
    Ich mein in der apache2.conf sind beide Timeouts (300 und 60) auskommentiert.. *grübel*

  13. Hi Phil,

    bin mal wieder über deinen Blog gestolpert. Habe mich jetzt vor kurzem mit dem Thema auseinandergesetzt. Mittlerweile kann man über einen Produktiv Einsatz nachdenken, solange für eine vernünftige Fallbacklösung gesorgt ist.

    Aus diesem Grund habe ich mich für mein favorisiertes JavaScript Framework jQuery mal nach einem guten Plugin umgeschaut. Keines hatte eine vernünftig funktionierende Fallbacklösung implementiert.

    So habe ich mich mal ein wenig hingesetzt und eine erste Version eines Plugins mit einer netten API und einer ersten Prototyp-Multiplexing-Implementiertung geschrieben. Falls du Interesse hast, du findest es hier:
    https://github.com/clickalicious/jQuery.WebSocket

    Viele Grüße

Hinterlasse eine Antwort

Pflichtfelder sind mit * markiert.