WebSocket
Mensagens instantâneas entre o servidor e o cliente.
Introdução
Com WebSocket é possível estabelecer uma conexão permanente entre o servidor e o navegador do cliente.
Isto quer dizer que a qualquer momento o navegador poderá utilizar a conexão estabelecida via WebSocket para enviar dados para o servidor, sem ser obrigatório obter uma resposta. O mesmo acontece para o servidor que poderá contactar o navegador do cliente enviando dados de forma imediata.
A comunicação é realizada instantaneamente e a qualquer momento é possível transitar dados de um lado para o outro de forma independente e imediata.
É muito útil para realizar operações de realtime com comunicações imediatas, é como se fosse um chat, um bate-papo entre o navegador e o servidor, a qualquer momento qualquer um pode enviar uma mensagem e o outro recebe.
Por exemplo, é muito utilizado desde soluções de chats no geral até jogos, utilizamos também para apresentar alteração de dados ao vivo, ou seja, quando existe a necessidade de realizar comunicação o mais imediata possível.
De forma simplificada a diferença entre a comunicação clássica HTTP e o WebSocket:

Do lado do servidor é criado um endpoint, endereço que permite estabelecer conexões com WebSocket.
O servidor tem a capacidade de enviar dados apenas para uma conexão específica, ou seja, é possível enviar novas mensagens para um participante de um chat em específico.
Também o servidor pode fazer broadcast que é o envio de dados para todas as conexões ativas num determinado
endereço, ou seja, quando é enviado uma mensagem para todos os participantes do chat que estão em uma sala ou em um
grupo.
Ativação e Configuração
Para ativar e configurar o WebSocket na sua aplicação Netuno é necessário editar o arquivo de configuração da aplicação referente ao ambiente que está sendo utilizado, como:
📂 config/_development.json📂 config/_production.json
Insira e ajuste os seguintes parâmetros:
...
"ws": {
"hosts": [...], "<-- OPCIONAL": "mais sobre na documentação abaixo.",
"endpoints": [
{
"name": "pool",
"enabled": true,
"sendTimeout": 10000,
"idleTimeout": 0,
"maxText": 15000,
"public": "/ws/pool",
"path": "/",
"service": "/services/ws/pool"
},
{
"name": "room",
"enabled": true,
"sendTimeout": 10000,
"idleTimeout": 0,
"maxText": 15000,
"public": "/ws/room",
"path": "/{uid}",
"service": "/services/ws/room"
}
]
},
...
endpoints
É um array que permite definir que o servidor vai suportar WebSocket através dos múltiplos endereços públicos específicados (endpoints), então cada endpoint é um endereço público que suporta receber conexões via WebSockets a partir dos navegadores.
name
Nome de identificação do endpoint.
enabled
Permite ativar e desativar o endpoint, o padrão é true (ativo).
sendTimeout
Limite de tempo máximo para enviar uma mensagem para os clientes, o padrão é 60000 milissegundos, ou seja, equivale
a 1 minuto.
idleTimeout
Limite de tempo máximo para a inatividade na conexão, o padrão é 300000 milissegundos, ou seja, equivale a 5 minutos.
maxText
Limite em bytes para o tamanho máximo do comprimento da mensagem, o padrão é 1048576 equivalente a 1 megabyte.
public
Define a base do endereço público que permitirá receber as conexões via WebSocket vinda dos navegadores.
O endereço final é constituído pelo valor da configuração public seguido pelo que está definido no path.
path
Define a parte final do caminho do endereço público, pode ser dinâmico, o que permite criar por exemplos múltiplos canais separados, por exemplo é útil para criar múltiplas salas.
Atenção: O
pathdeve sempre iniciar com/, e na configuração de conexão no front-end é muito importante conter a barra exatamente como definido nopath.
No front-end o endereço final será o public + path, veja o exemplo:
...
"public": "/ws/pool",
"path": "/",
...
Então o endereço final no front-end será /ws/pool/, com a barra no fim.