En el mundo interconectado de hoy en día, la necesidad de actualizaciones en tiempo real es primordial para los sitios web y las aplicaciones IoT.
Una forma de entregar información instantáneamente a sus sitios o aplicaciones es utilizar el protocolo Websocket que proporciona un canal de comunicación full-duplex entre un servidor y un cliente. Desde 4D V20, puede crear un servidor webs ocket con la clase 4D.WebSocketServer. Continuamos en v20 R2 con la clase 4D. WebSocket que le permite crear un cliente websocket para conectarse a cualquier servidor websocket.
En esta entrada de blog, nos conectaremos al servidor de chat dado como ejemplo en el blog del servidor websocket:
En este ejemplo, los mensajes se mostrarán en un listbox poblado por la colección Form.messages.
gestionar eventos websocket
En primer lugar, necesitas crear una clase para gestionar los eventos del websocket e instanciarla. Para ello, necesitas crear una clase con algunas de las siguientes funciones, dependiendo de tus necesidades:
- onMessage(), llamada cada vez que llega un mensaje a través de esta conexión,
- onOpen(), llamada cuando se abre la conexión websocket,
- onTerminate(), llamada cuando se cierra la conexión websocket,
- onError(), llamada cuando se produce un error.
En nuestro ejemplo, queremos mostrar el mensaje recibido del servidor y mostrar el cierre de la conexión. Así que creamos esta clase 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")
Y queremos enviar los mensajes escritos por el usuario al servidor:
// Sends a message through the websocket client connected to the websocket server
Form.webSocket.send(Form.message)
conectar con el servidor
Para conectar tu aplicación al servidor websocket, necesitas instanciar la clase 4D.WebSocket usando la url del servidor como primer parámetro y tu manejador de conexión WebSocket en el segundo:
Form.webSocket:=4D.WebSocket.new($wssUrl; cs.WSConnectionHandler.new())
Consulta esta función con el IDH y la documentación para obtener más detalles.