WebSockets: RWebSocketsServer V0.1 alpha
Der RWebSocketsServer für PHP 5.3+ -- ist etwas aufwendiger geworden, kann dafür aber auch statische Webinhalte sowie für Flash das Socket-Policy-File bereitstellen.
Installation
svn checkout https://svn.rubisco.eu/repos/trunk/php/Rubisco/RWebSocketsServer/ RWebSocketsServer
Starten mit
php rwebsocketsserver.php php rwebsocketsserver.php --ipaddress 127.0.0.1 --port 12345
Aufruf im Webbrowser über: http://127.0.0.1:12345/
Zum Beenden CTRL-C
drücken.
Einstellungen in conf/rwebsockets.ini
.
HandleWebSockets.php
Der Hauptteil für die WebSockets liegt in HandleWebSockets.php
.
doUpgrade()
verarbeitet den Opening-Handshake
des Clients.
In handle()
findet die Verarbeitung der Eingaben statt, die an die entprechenden Methoden des Event-Handlers weitergegeben werden.
websockets/Events.php
websockets/Events.php
ist die Basisklasse der
WebSockets-Event-Handler.
Mit sendTextFrame($text, $doUTF8Encode = false)
wird ein
Textframe verschickt und mit close()
kann die Verbindung von
der Serverseite aus geschlossen werden.
onOpen(), onClose($reason), onTextFrame($text), onTrigger($event) und onError($error)
sind die Methoden zur Verarbeitung der Events.
onTrigger()
wird bei serverseitigen Events aufgerufen. Dies
ist im Moment nur der Zeitgeber (alle 30 Sek.).
Eigenen Event-Handler schreiben
Als Beispiel liegt in net/server/websockets/EchoWS.php
der
Echo-Event-Handler, welcher alle Eingaben unverändert zurückschickt.
Für einen eigenen Event-Handler wird in net/server/websockets/
eine
Datei mit einer Unterklasse von net/server/websockets/Events.php
angelegt z.B. MyHandler.php
und die onXXX()
-Methoden passend überschrieben.
In conf/rwebsockets.ini
muss der ws://-Pfad zu
diesem Handler unter [websockets]
eingetragen werden.
[websockets] ; Classname = "path"; EchoWS = "/echo" MyHandler = "/myhandler"
Nach dem Neustart des Servers ist dieser Handler über
ws://127.0.0.1:12345/myhandler
erreichbar.
Die weiteren Klassen
- Server.php
- Die Klasse des Servers. Diese erzeugt den Server,
wartet auf Verbindungen (
listen()
), akzeptiert diese (accept()
), erzeugt die Client-Handler und reicht die Eingaben an die Handler über derenhandle()
-Methoden weiter. - HandleClient.php
- Die Basisklasse für die Client-Handler. Diese
erhalten in der
handle()
-Methode die Eingaben und schreiben ihre Ausgaben viafwrite($this->stream, 'output');
- HandleHTTP.php
- Umfangreicher Client-Handler für die Auslieferung von statischen Webinhalten, den Upgrade auf WebSockets und der Bereitstellung der Flash-Policy.
- Header.php, RequestHeader.php, ResponseHeader.php
- Klassen zum Parsen und Erstellen der HTTP-Header.
Quelltext (MIT Lizenz)
Der komplette Quelltext von RWebSocketsServer liegt in Subversion: Heutige Revision 31, aktuelle Version.