Websockets
| Wissen | Können | Projekt |
|---|---|---|
|
|
|
Aus den vorherigen Kapiteln ist bereits hervorgegangen, dass mittels AJAX Anfragen an einen Server gesendet und von diesem gesendete Antworten asynchron angenommen werden können. Die Verbindung zum Server besteht dabei aber immer nur über den Zeitraum der Anfragenbearbeitung. Eine echte Session über diesen Zeitraum hinaus gibt es nicht. Auch gehen Anfragen immer vom Client aus, eine vom Server ausgehende Benachrichtigung des Clients ist damit prinzipiell nicht möglich. Die einzige Möglichkeit um am Client von Statusänderungen am Server zu erfahren, besteht darin, ständig den Status abzufragen (Polling). Mit Long Polling (Server antwortet auf die Polling-Anfrage erst nach einer festgelegten Zeit oder früher bei Statusänderung) kann die Anzahl der Aufrufe verringert aber nicht minimiert werden.
Websockets eröffnen eine Alternative die sowohl das Session-Handling als auch die bidirektionale Benachrichtigung beinhaltet. Am Webserver wird dazu ein Port geöffnet, der auf externe Anfragen wartet. Verbindet sich ein Client mit diesem Port wird eine bidirektionale Verbindung ausgehandelt die solange besteht bis sie entweder vom Client oder vom Server beendet wird. Diese Verbindung kann nun genutzt werden um aktiv Daten in beide Richtungen zu versenden.
Websockets am Client
|
Websockets am Server
|
Projekt und weitere Übungen
Bei einem Chat geht es darum Nachrichten an alle Chatbeteiligten zu senden. Diese sollten am Client immer mit dem vorangestellten Namen des Verfassers ausgegeben werden.
Beispiellösung WE1-P9.zip- AJAX-Comet: Broadcasting
- Setzen Sie das Broadcasting-Beispiel aus der Vorlesung auf. Verwenden Sie mehrere Browser-Instanzen.
- Wenn sich immer mehr Clients beim Server registrieren, die Clients jedoch keine Daten senden, entstehen serverseitig immer mehr (leere) Briefkästen. Außerdem ist das für den gesamten Ordner erforderliche Schreibrecht ein problematischer Sicherheitsaspekt. Wandeln Sie die Anwendung so ab, dass anstelle der Briefkästen eine einzige XML Datei für dem Server angelegt wird. Diese Datei enthält die ehemaligen Briefkasteninhalte zusammen mit je einem Zeitpunkt, wann diese zuletzt geleert wurden. Bei jedem Abruf des Scripts wird diese XML Datei mit simplexml_load_file geladen und ausgelesen, s. Folien weiter unten. (Das geht mit PHP sehr angenehm und man braucht nur das Schreibrecht für genau diese XML-Datei.)
- Beurteilen Sie die Performance-Eigenschaften. Es ist eine leichte Verschlechterung gegenüber der Briefkasten-Version zu vermuten.
- Bringen Sie das WebSocket-Chat-Beispiel aus der Vorlesung (letzter Teil) zum Laufen.
- Wikipedia als Informationsquelle
- Um aus einem Programm Anfragen an die Wikipedia zu stellen, verwenden Sie die Query-API. Folgen Sie dem Beispiel auf dieser Seite und sehen Sie sich auch an, wie einfach es ist AJAX mit jQuery auszudrücken (API-Dokumentation).
- Die ermittelten Daten sollen im XML/JSON-Format übertragen und mit SimpleXML von PHP verarbeitet werden.