Nel mondo interconnesso di oggi, la necessità di aggiornamenti in tempo reale è fondamentale per i siti web e le applicazioni IoT.
Un modo per fornire informazioni istantaneamente ai siti o alle applicazioni è utilizzare il protocollo Websocket, che fornisce un canale di comunicazione full-duplex tra un server e un client. Da 4D V20, è possibile creare un server websocket con la classe 4D.WebSocketServer. Nella versione v20 R2 è disponibile la classe 4D.WebSocket che consente di creare un client websocket per connettersi a qualsiasi server websocket.
In questo post, ci collegheremo al server di chat fornito come esempio nel blog sui server websocket:
In questo esempio, i messaggi verranno visualizzati in una casella di riepilogo popolata dalla collezione Form.messages.
gestire gli eventi websocket
Per prima cosa, è necessario creare una classe per gestire gli eventi websocket e istanziarla. Per farlo, occorre creare una classe con alcune delle seguenti funzioni, a seconda delle esigenze:
- onMessage(), chiamata ogni volta che arriva un messaggio attraverso questa connessione,
- onOpen(), chiamata quando la connessione websocket viene aperta,
- onTerminate(), chiamata quando la connessione websocket viene chiusa,
- onError(), chiamata quando si verifica un errore.
Nel nostro esempio, vogliamo visualizzare il messaggio ricevuto dal server e visualizzare la chiusura della connessione. Creiamo quindi questa classe 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")
E vogliamo inviare al server i messaggi scritti dall’utente:
// Sends a message through the websocket client connected to the websocket server
Form.webSocket.send(Form.message)
connettersi al server
Per connettere la vostra applicazione al server websocket, dovete istanziare la classe 4D.WebSocket utilizzando l’url del server come primo parametro e il vostro gestore di connessione WebSocket come secondo:
Form.webSocket:=4D.WebSocket.new($wssUrl; cs.WSConnectionHandler.new())
Per maggiori dettagli, verificare questa funzione con l’HDI e la documentazione!