Eine Websocket-Applikation erstellen
Um eine Websocket-Applikation zu erstellen, muss eine Klasse erstellt werden, die von der Klasse Ego_WebsocketApplication
(lib/websockets/applications/Ego_WebsocketApplication.php) erbt. In dieser Klasse müssen die Methoden onConnect
, onDisconnect
und onMessage
definiert werden. Das könnte wie folgt aussehen:
<?php¬¬require_once·'websockets/applications/Ego_WebsocketApplication.php';¬¬class·TestApplication·extends·Ego_WebsocketApplication·{¬————/**·@var·Ego_WebsocketClient[]·*/¬————private·array·$clients·=·[];¬¬————/**¬————·*·@param·Ego_WebsocketClient·$client¬————·*¬————·*·@return·void¬————·*/¬————public·function·onConnect(Ego_WebsocketClient·$client):·void·{¬————————$this->clients[$client->getClientId()]·=·$client;¬————}¬¬————/**¬————·*·@param·Ego_WebsocketClient·$client¬————·*¬————·*·@return·void¬
Den Server um Applikationen erweitern
Um dem Websocket-Server eine Applikation hinzuzufügen, muss unter var/lib/websockets
eine applications.php
hinterlegt werden. In dieser Datei muss es eine Funktion mit dem Namen get_websocket_applications
geben. Diese liefert ein Array mit allen Applikationen, die dem Server hinzugefügt werden sollen. Der Array-Schlüssel, der hier verwendet wird, wird später auch verwendet um die Applikation anzusprechen. Die Datei kann dann folgendermaßen aussehen:
<?php¬¬require_once·'applications/TestApplication.php';¬¬function·get_websocket_applications()·{¬————return·['test_application'·=>·TestApplication::getInstance()];¬}¶
Eine Websocket-Applikation ansprechen
Eine Websocket-Applikation kann über die Javascript Websocket-API angesprochen werden. Dieser Aufruf könnte wie folgt aussehen:
let·webSocket·=·new·WebSocket(`wss://${host}/ws/${application}?${user_id}`);¬¬webSocket.addEventListener('open',·()·=>·{console.log('Websocket-Verbinding·geöffnet')});¬webSocket.addEventListener('message',·event·=>·{console.log('Nachricht·vom·Websocket-Server:',·event.data)});¬webSocket.addEventListener('close',·()·=>·{console.log('Websocket-Verbindung·geschlossen')});¬webSocket.addEventListener('error',·()·=>·{console.log('Fehler·bei·der·Websocket-Verbindung')});¶
Bei application
handelt es sich um den Schlüssel der Applikation, mit der man sich verbinden möchte. Dieser entspricht dem Array-Schlüssel, der beim registrieren der Applikation verwendet wurde (In diesem Beispiel test_application
).
Bei user_id
handelt es sich um eine eindeutige Kennung des aktuellen Clients. Es ist empfohlen (aber nicht zwingend erforderlich) hier die user_id
des angemeldeten CMS-Benutzers zu verwenden.