Instalando e Configurando o Soketi: um Servidor WebSocket Baseado em Pusher

O Soketi é baseado no uWebSocket.js, um servidor WebSocket baseado em Node.js, transpilado a partir da linguagem C. Ele oferece uma solução robusta e eficiente para comunicação em tempo real entre aplicações.

Se você está procurando uma maneira fácil de habilitar a comunicação bidirecional entre um servidor e um cliente em tempo real, o Soketi é a escolha ideal. Ele permite que você transmita informações instantaneamente e de forma assíncrona, sem a necessidade de atualizações constantes da página ou consultas repetitivas ao servidor.

Neste tutorial, você aprenderá como instalar e configurar o Soketi em uma máquina virtual hospedada na DigitalOcean, uma plataforma de computação em nuvem confiável e escalável.

Não é meu objetivo mostrar como configurar uma máquina na DO. Vou assumir que você já possui esse conhecimento.

Vamos lá.

Instalação

É necessário ter o Node.js LTS (14.x, 16.x, etc.) devido às limitações de compilação do uWebSockets.js.

O Soketi pode ser facilmente instalado através do NPM

npm install -g @soketi/soketi

Após a instalação, um servidor Soketi com a configuração padrão pode ser iniciado usando o comando

soketi start

Por padrão, o comando irá iniciar um servidor em 127.0.0.1:6001 com as seguintes credenciais de aplicativo:

  • App ID: app-id

  • App Key: app-key

  • Secret: app-secret

Essas credenciais são usadas pra autenticar seus aplicativos no frontend e backend, permitindo que você mande e receba mensagens em tempo real.

Logo mais abaixo, te explico como você pode alterar.

Configuração do Servidor

Você pode declarar as configuração do servidor soketi usando variáveis de ambiente ao invocar diretamente o servidor soketi no console, ou como atributos chave-valor em um arquivo .env que é colocado no mesmo diretório onde o comando do servidor soketi é executado.

Exemplo de um arquivo .env

SOKETI_DEBUG=1
SOKETI_DEFAULT_APP_ID=1111
SOKETI_DEFAULT_APP_KEY=2222
SOKETI_DEFAULT_APP_SECRET=3333

Uma lista completa de variaveis de ambiente pode ser encontrada clicando aqui.

Exemplo de um arquivo de configuração config.json

{
    "debug":true,
    "appManager.array.apps":[
        {
            "id":"1111",
            "key":"2222",
            "secret":"3333"
        }
    ]
}

Uma lista completa de opções a serem configuradas pode ser encontrada clicando aqui.

Note que em ambos os arquivos de configuração, temos as informações de APP-ID, APP-KEY e APP-SECRET, você pode modificar esses valores livremente. O importante é que uma vez definidos, você use-os no momento de se conectar ao servidor soketi, seja no frontend ou no backend.

Iniciando o serviço

Lembre-se, se você optou por usar um arquivo de configuração json, deve iniciar o serviço como mostrado abaixo

soketi start --config=/path/to/config.json

Já se tiver optado por usar um arquivo .env, você deve iniciar o serviço no mesmo diretório onde o arquivo .env foi criado. Então a inicialização ficaria:

soketi start

Após iniciar o serviço, você deve ver algo como a figura abaixo:

Instalando o Supervisor

Para manter o servidor soketi permanentemente ativo, você deve instalar um gerenciador de processos, no nosso exemplo, iremos utilizar o supervisor, um daemon que pode executar e reiniciar processos em segundo plano.

Passo 1

Comece atualizando suas fontes de pacotes e instalando o Supervisor:

sudo apt update && sudo apt install supervisor

O serviço do Supervisor é executado automaticamente após a instalação. Você pode verificar o seu status utilizando o comando:

sudo systemctl status supervisor

Você deve ver algo no seu console parecido com:

Passo 2

Uma prática recomendada ao trabalhar com o Supervisor é escrever um arquivo de configuração para cada programa que ele irá gerenciar.

Crie o arquivo de configuração executando o comando abaixo:

sudo nano /etc/supervisor/conf.d/soketi.conf

Em seguida, cole o conteudo abaixo:

[program:soketi] 
process_name=%(program_name)s_%(process_num)02d 
command=soketi start --config=/PATH/TO/CONFIG-FILE
autostart=true 
autorestart=true 
stopasgroup=true 
killasgroup=true 
user=ubuntu 
numprocs=1 
redirect_stderr=true 
stdout_logfile=/var/log/soketi-supervisor.log 
stopwaitsecs=60 
stopsignal=sigint 
minfds=10240

Como você pode ver na configuração acima, um único servidor soketi será iniciado e este servidor reiniciará automaticamente em caso de falha. Os registros de log serão gravados em /var/log/soketi-supervisor.log.

É importante observar que as opções de configuração stopwaitsecs e stopsignal devem ser definidas como no exemplo acima. Se necessário, você pode aumentar o valor de stopwaitsecs para um valor maior. Esse é o número de segundos que o Supervisor permitirá que o soketi encerre todas as conexões de forma adequada quando o servidor estiver parando ou reiniciando.

Em ambientes Linux, tudo é um arquivo, incluindo os sockets ativos. Para rastrear as conexões de socket, o soketi cria um descritor de arquivo para cada conexão. Em alguns casos, você pode encontrar um limite suave de descritores de arquivo definido pelo seu sistema operacional. Nessa situação, você pode definir a opção de configuração minfds do Supervisor para um valor mais alto, permitindo que o sistema operacional gerencie mais conexões.

Um ponto importante a destacar é de que se você tiver optado por configurar o soketi com arquivo .env você precisa configurar o Supervisor para que o serviço seja executado em um diretório especifico, aquele onde você colocou o arquivo .env a configuração ficaria levemente diferente.

[program:soketi] 
process_name=%(program_name)s_%(process_num)02d 
directory=/PATH/WHERE/ENV-FILE/IS
command=soketi start 
...

É isso, se te ajudei, comente! Obrigado.

Did you find this article valuable?

Support Luan Rodrigues by becoming a sponsor. Any amount is appreciated!