No mundo interligado de hoje, a necessidade de actualizações em tempo real é fundamental para sítios Web e aplicações IoT.
Uma maneira de entregar informação instantaneamente para seus sites ou aplicações é usar o protocolo Websocket que fornece um canal de comunicação full-duplex entre um servidor e um cliente. A partir de 4D V20, é possível criar um servidor Websocket com a classe 4D.WebSocketServer. Continuamos na v20 R2 com a classe 4D.WebSocket que permite criar um cliente websocket para se conectar a qualquer servidor websocket.
Nesta postagem do blogue, vamos nos conectar ao servidor de bate-papo dado como exemplo no blogue do servidor de websocket:
Neste exemplo, as mensagens serão exibidas em uma caixa de listagem preenchida pela coleção Form.messages.
gerir eventos de websocket
Em primeiro lugar, é necessário criar uma classe para gerir os eventos de websocket e instanciá-la. Para isso, é necessário criar uma classe com algumas das seguintes funções, dependendo das suas necessidades:
- onMessage(), chamada cada vez que uma mensagem chega através desta conexão,
- onOpen(), chamada quando a conexão websocket é aberta,
- onTerminate(), chamada quando a ligação websocket é fechada,
- onError(), chamada quando ocorre um erro.
No nosso exemplo, queremos mostrar a mensagem recebida do servidor e mostrar o fecho da ligação. Por isso, criamos esta 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 queremos enviar as mensagens escritas pelo utilizador para o servidor:
// Sends a message through the websocket client connected to the websocket server
Form.webSocket.send(Form.message)
ligar ao servidor
Para conectar sua aplicação ao servidor websocket, é necessário instanciar a classe 4D.WebSocket usando a url do servidor como primeiro parâmetro e seu manipulador de conexão WebSocket no segundo:
Form.webSocket:=4D.WebSocket.new($wssUrl; cs.WSConnectionHandler.new())
Consulte esta funcionalidade com o HDI e a documentação para obter mais pormenores!