V dnešním propojeném světě je pro webové stránky a aplikace internetu věcí nejdůležitější potřeba aktualizací v reálném čase.
Způsobem, jak okamžitě poskytovat informace webům nebo aplikacím, je použití protokolu Websocket, který poskytuje plně duplexní komunikační kanál mezi serverem a klientem. Ve verzi 4D V20 můžete vytvořit websocketový server pomocí třídy 4D.WebSocketServer. Ve verzi v20 R2 pokračujeme třídou 4D.WebSocket, která umožňuje vytvořit websocketového klienta pro připojení k libovolným websocketovým serverům.
V tomto příspěvku se připojíme k chatovacímu serveru uvedenému jako příklad v blogu o websocketovém serveru:
V tomto příkladu se budou zprávy zobrazovat v seznamu vyplněném kolekcí Form.messages.
správa událostí webového socketu
Nejprve je třeba vytvořit třídu pro správu událostí websocketu a instancovat ji. K tomu je třeba vytvořit třídu s některou z následujících funkcí, v závislosti na vašich potřebách:
- onMessage(), která se volá pokaždé, když přes toto spojení přijde zpráva,
- onOpen(), která se volá při otevření spojení websocket,
- onTerminate(), která se volá, když je spojení websocket uzavřeno,
- onError(), volaná při výskytu chyby.
V našem příkladu chceme zobrazit zprávu přijatou ze serveru a zobrazit uzavření spojení. Vytvoříme tedy tuto třídu WSConnectionHandler:
Class constructor
Function onMessage($ws : Object; $event : Object)
Form.messages.push($event.data)
Function onTerminate($ws : Object; $event : Object)
Form.messages.push("Connection closed")
A chceme odesílat zprávy napsané uživatelem na server:
// Sends a message through the websocket client connected to the websocket server
Form.webSocket.send(Form.message)
připojit k serveru
Pro připojení aplikace k websocketovému serveru je třeba instanciovat třídu 4D.WebSocket s použitím url adresy serveru jako prvního parametru a vaší obsluhy připojení k websocketovému serveru v druhém parametru:
Form.webSocket:=4D.WebSocket.new($wssUrl; cs.WSConnectionHandler.new())
Pro více informací si tuto funkci prohlédněte pomocí HDI a dokumentace!