In der heutigen vernetzten Welt ist der Bedarf an Echtzeit-Updates für Websites und IoT-Anwendungen von größter Bedeutung.
Eine Möglichkeit, Informationen sofort an Ihre Websites oder Anwendungen zu liefern, ist die Verwendung des Websocket-Protokolls, das einen Vollduplex-Kommunikationskanal zwischen einem Server und einem Client bietet. Ab 4D v20 können Sie einen Websocket-Server mit der Klasse 4D.WebSocketServer erstellen. In v20 R2 gibt es die Klasse 4D.WebSocket, mit der Sie einen Websocket-Client erstellen können, der sich mit beliebigen Websocket-Servern verbindet.
In diesem Blogbeitrag werden wir uns mit dem Chat-Server verbinden, der als Beispiel im Websocket-Server-Blog angegeben ist:
In diesem Beispiel werden die Nachrichten in einer Listbox angezeigt, die von der Sammlung Form.messages gefüllt wird.
Websocket-Ereignisse verwalten
Zunächst müssen Sie eine Klasse zur Verwaltung der Websocket-Ereignisse erstellen und instanziieren. Zu diesem Zweck müssen Sie eine Klasse mit einigen der folgenden Funktionen erstellen, je nach Bedarf:
- onMessage(), die jedes Mal aufgerufen wird, wenn eine Nachricht über diese Verbindung eingeht,
- onOpen(), die aufgerufen wird, wenn die Websocket-Verbindung geöffnet wird,
- onTerminate(), die aufgerufen wird, wenn die Websocket-Verbindung geschlossen wird,
- onError(), die aufgerufen wird, wenn ein Fehler auftritt.
In unserem Beispiel wollen wir die vom Server empfangene Nachricht anzeigen und das Schließen der Verbindung anzeigen. Also erstellen wir diese WSConnectionHandler-Klasse:
Class constructor
Function onMessage($ws : Object; $event : Object)
Form.messages.push($event.data)
Function onTerminate($ws : Object; $event : Object)
Form.messages.push("Connection closed")
Und wir wollen die vom Benutzer geschriebenen Nachrichten an den Server senden:
// Sends a message through the websocket client connected to the websocket server
Form.webSocket.send(Form.message)
Verbindung zum Server herstellen
Um Ihre Anwendung mit dem Websocket-Server zu verbinden, müssen Sie 4D.WebSocket instanziieren und dabei die Server-URL als ersten Parameter und Ihren WebSocket-Verbindungshandler als zweiten Parameter angeben:
Form.webSocket:=4D.WebSocket.new($wssUrl; cs.WSConnectionHandler.new())
Sehen Sie sich diese Funktion mit dem HDI und die Dokumentation für weitere Details an!