Erweiterung des Websocket-Servers um Applikationen

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¬
 
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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()];¬
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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')});
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

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.