Facebook einblenden
Close

- Webdesign for everybody

Mobile

WebSockets mit PHP

Bisher wurde durch AJAX das Web 2.0 interaktiv gestaltet, doch seit geraumer Zeit gibt es eine neue Technik um eine solche dynamische Interaktion zu verwirklichen. Unter dieser dynamischen Interaktion versteht man die Anzeige eines veränderten Contents ohne das Neuladen einer Website.

Das Zauberwort heißt: WebSockets

Klassisches Modell einer Webanwendung vs. AJAX Modell:

AJAX Vergleich

Was sind WebSockets?

WebSockets ist eine Technik für eine Zwei-Wege Kommunikation (Full-Duplex) über eine TCP/IP Schnittstelle. (PUSH Model)

WebSockets ermöglichen somit einen ständigen Datenaustausch (bei neuen Daten) zwischen Client und Server und stellt somit eine Ersatzmöglichkeit zu AJAX dar.

Step 1: WebSocket Server installieren

Ich verwende LAMPP auf Ubuntu 10.04 LTS um den PHP Server lokal laufen zu lassen.

(LAMPP – Apache Friends)

Weiters wird auf Ubuntu folgende PHP Erweiterung benötigt: php5-cli

sudo apt-get install php5-cli

Nach erfolgreicher Installation von LAMPP in das Verzeichnis /opt/lampp wird der lokale Server mit diesen Befehl gestartet:

sudo /opt/lampp/lampp start

Anschließend sollte überprüft werden ob die installierte PHP Version Sockets unterstützt.

Dies wird mittels php überprüft. Erstelle eine Datei mit dem Namen phpinfo.php und schreibe diesen Code in die Datei:

phpinfo();

Diese Datei wird nun in das Verzeichnis /opt/lampp/htdocs und aufgerufen.

Wenn im Bereich Configure-Command ‘–enable-sockets’ aufgelistet wird ist die Socketunterstützung eingeschalten. Falls dieser Befehl nicht aufgelistet wird kannst du dir HIER die Aktivierung ansehen. Nach Abschluss dieser Konfiguration folgt Schritt 2:

Step 2: Erstellung der server.php Datei

In der server.php Datei werden einerseits festgelegt auf welche Adresse & Port der Socket horcht und einerseits was mit den eintreffenden Daten geschieht.

<?php
          // set some variables
          $host = "localhost"; $port = 1234;
          // don't timeout!
          set_time_limit(0);
          // create socket
          $socket = socket_create(AF_INET, SOCK_STREAM, 0) or die("Could not create socketn");
          // bind socket to port
          $result = socket_bind($socket, $host, $port) or die("Could not bind to socketn");
          // start listening for connections
          $result = socket_listen($socket, 3) or die("Could not set up socket listenern");
          // accept incoming connections
          // spawn another socket to handle communication
          $spawn = socket_accept($socket) or die("Could not accept incoming connectionn");
          // read client input
          $input = socket_read($spawn, 1024) or die("Could not read inputn");
          // clean up input string
          $input = trim($input);
          // reverse client input and send back
          $output = strrev($input) . "n"; socket_write($spawn, $output, strlen ($output)) or die("Could not write outputn");
          // shutdown sockets
          socket_shutdown($spawn , 2);
          $shutdown = socket_shutdown($socket , 2);
          if($shutdown == true) echo "Socket geschlossen!";
          // close sockets
          socket_close($spawn);
          socket_close($socket);

?>

Diese server.php bewirkt, dass bei einer eingehenden Verbindung mit Stringübergabe der String umgekehrt wird und wieder ausgegeben wird.

Step 3: Testung

In einem Terminal – Fenster wird nun mittels sudo php -q /opt/lampp/htdocs/server.php der Server gestartet.

Anschließend wird in einem weiteren Terminal – Fenster via telnet mit dem Server eine Verbindung hergestellt und ein Teststring in das 2te Terminal – Fenster eingegeben.

Folgendes sollte zu sehen sein:

Terminal Image

Zum Abschluss ist noch zu sagen, dass WebSockets eine gute Alternative zu AJAX darstellen. Jedoch ist es noch in der Entwicklungsphase und wird von W3C erst noch standardisiert.

Benny Klotz

Hallo, mein Name ist Benny Klotz und ich bin Webdesigner & Webdeveloper. Ich hoffe euch hat dieser Artikel gefallen und ich würde mich über euer Feedback freuen. Ihr könnt mich auf Twitter unter dem Namen @BennyKlotz finden.

4 Reaktionen

  • Guillermo sagt:

    Hi Benny,

    interessanter Artikel, ich finde aber dass die entscheidende Sicht des Clients fehlt, das ist ja gerade das Neue. Sockets sind ja nichts Neues :)

  • Stephan sagt:

    Hey,

    wie Guillermo schon erwähnte, wer es interessant zu sehen, inwieweit der Server wirklich mit dem Client kommuniziert (Stichwort: HTML5 WebSocket-Schnittstelle – W3C). Ich frage mich nämlich gerade, ob das bei deinem Beispiel-Server überhaupt laufen würde, da standardmäßig dein Server ja eine clientseitige HTTP-GET-Abfrage bzgl. WebSocket-Upgrade verarbeiten können müsste?! In deinem Fall über telnet verwendest du das WebSocket-Protokoll ja eigentlich gar nicht…

    • Hi Stephan,
      danke für dein Kommentar.
      Natürlich hast du damit recht, dass das wirklich interessante die neue HTML5 WebSocket Schnittstelle darstellt.
      Auch hast du damit recht , dass die von mir gezeigte server.php keine HTTP – GET Abfrage verarbeitet und somit auch der WebSocket nicht über HTTP angesprochen werden kann.

      Wie bereits vorhin erwähnt werde ich einen Artikel schreiben der die HTML5 WebSocket API genauer behandeln wird und zeigt wie es somit AJAX ersetzen kann.

      MFG Benny :)

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

*

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Um Code einzufügen benütze [code][/code]!

Für javascript zb.: [code lang="js"][/code]