Usando WebSockets com Node.js
O JavaScript Full-Stack Bootcamp 2021 está AGORA ABERTO PARA ASSINATURAS!
WebSockets são uma alternativa à comunicação HTTP em Aplicações Web.
Oferecem um canal de comunicação bidireccional de longa duração entre cliente e servidor.
Após estabelecido, o canal é mantido aberto, oferecendo uma ligação muito rápida com baixa latência e sobrecarga.
Suporte de navegador para WebSockets
WebSockets são suportados por todos os navegadores modernos.
p>
Como os WebSockets diferem do HTTP
HTTP é um protocolo muito diferente, e também uma forma diferente de comunicação.
HTTP é um protocolo de pedido/resposta: o servidor devolve alguns dados quando o cliente os solicita.
Com WebSockets:
- o servidor pode enviar uma mensagem ao cliente sem que o cliente peça explicitamente algo
- o cliente e o servidor podem falar um com o outro simultaneamente
- muito poucos dados precisam de ser trocados para enviar mensagens. Isto significa uma comunicação de baixa latência.
WebSockets são óptimos para comunicações em tempo real e de longa duração.
HTTP é óptimo para trocas de dados ocasionais e interacções iniciadas pelo cliente.
HTTP é muito mais simples de implementar, enquanto que os WebSockets requerem um pouco mais de sobrecarga.
Sockets WebSockets seguros
Sempre utilizam o protocolo seguro e encriptado para WebSockets, wss://
.
ws://
refere-se à versão insegura dos WebSockets (o http://
dos WebSockets), e deve ser evitado por razões óbvias.
Create a new WebSockets connection
const url = 'wss://myserver.com/something'const connection = new WebSocket(url)
connection
é um objecto WebSocket.
Quando a ligação é estabelecida com sucesso, o open
evento é despedido.
Oiça-o atribuindo uma função de retorno ao objecto onopen
propriedade do objecto connection
:
connection.onopen = () => { //...}
Se houver algum erro, a onerror
função de retorno de chamada é disparada:
connection.onerror = error => { console.log(`WebSocket error: ${error}`)}
Enviar dados para o servidor utilizando WebSockets
Após a ligação estar aberta, é possível enviar dados para o servidor.
p>Pode fazê-lo convenientemente dentro da função onopen
callback:
connection.onopen = () => { connection.send('hey')}
Receber dados do servidor utilizando WebSockets
Ouvir com uma função de callback em onmessage
, que é chamado quando o message
evento é recebido:
connection.onmessage = e => { console.log(e.data)}
Implementar um servidor WebSockets no Nodo.js
ws é uma popular biblioteca de WebSockets para Node.js.
Utilizamo-la para construir um servidor WebSockets. Também pode ser usada para implementar um cliente, e usar WebSockets para comunicar entre dois serviços backend.
Instale-o facilmente usando
yarn inityarn add ws
O código de que precisa para escrever é muito pouco:
const WebSocket = require('ws')const wss = new WebSocket.Server({ port: 8080 })wss.on('connection', ws => { ws.on('message', message => { console.log(`Received message => ${message}`) }) ws.send('ho!')})
Este código cria um novo servidor na porta 8080 (a porta por defeito para WebSockets), e adiciona uma função de chamada de retorno quando uma ligação é estabelecida, enviando ho!
ao cliente, e registando as mensagens que recebe.
Veja um exemplo ao vivo em Glitch
Aqui está um exemplo ao vivo de um servidor WebSockets: https://glitch.com/edit/#!/flavio-websockets-server-example
Aqui é um cliente WebSockets que interage com o servidor: https://glitch.com/edit/#!/flavio-websockets-client-example
Download my free Node.js Handbook
div id=”9424025991″>O JavaScript Full-Stack Bootcamp 2021 AGORA ESTÁ ABERTO PARA SIGNIFICAR ATÉ TERÇA-FEIRA! Não perca esta oportunidade, inscreva-se HOJE!
Mais tutoriais de Nó:
- dependências e desviosnpm
- Como usar Sequelize para interagir com PostgreSQL
- Uma breve história de Nó.js
- Utilizar WebSockets com Nó.js
- Como obter tanto o corpo analisado como o corpo bruto em Express
- Como usar promessas e esperar com Node.js funções baseadas em Callback
- Como instalar Node.js
- Uma introdução ao gestor de pacotes npm
- Interagir com a API do Google Analytics usando Node.js
br>