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.
