Criando e Executando Projetos Socket.io com o ServBay 
O Socket.io é uma biblioteca JavaScript popular, criada para construir aplicações web em tempo real, bidirecionais e orientadas a eventos. Baseando-se no protocolo WebSocket, ele oferece mecanismos alternativos de fallback (como long polling) quando necessário, garantindo comunicação estável e confiável em diversas condições de clientes e redes.
Este guia detalha como aproveitar o poderoso ambiente local de desenvolvimento do ServBay para configurar, executar e gerenciar um projeto Socket.io. O ServBay fornece um ambiente Node.js pré-configurado e uma gestão prática de sites (anteriormente chamados de hosts), tornando o desenvolvimento com Socket.io ainda mais eficiente.
O que é o Socket.io? 
O Socket.io é uma biblioteca que implementa comunicação em tempo real, bidirecional e baseada em eventos. É composta por duas partes:
- Uma biblioteca backend executada no servidor Node.js.
- Uma biblioteca frontend em JavaScript executada no navegador.
Embora o foco do Socket.io seja o uso do WebSocket, ele garante compatibilidade com navegadores antigos ou redes restritas, detectando automaticamente e alternando para outros mecanismos de transporte, como Adobe Flash Socket, Ajax Long Polling, Ajax Multipart Streaming, Forever IFrame, JSONP Polling, entre outros.
Principais Recursos e Vantagens do Socket.io 
- Comunicação em tempo real: Permite troca de dados instantânea entre servidor e clientes, ideal para chats, ferramentas de colaboração, dashboards em tempo real, jogos online, etc.
- Suporte multiplataforma: Pode ser utilizado em navegadores web, aplicativos mobile e servidores Node.js.
- Reconexão automática: Caso a conexão caia, o cliente tenta se reconectar automaticamente, tornando a aplicação mais robusta.
- Orientado a eventos: Seu modelo de programação baseado em eventos facilita o gerenciamento e entendimento da comunicação assíncrona.
- Rooms e namespaces: Permite agrupar clientes em “salas” para transmissão segmentada de mensagens; “namespaces” permitem multiplexar múltiplas conexões no mesmo canal.
- Suporte a dados binários: Facilidade para enviar e receber arquivos binários.
- Alta compatibilidade: Trabalha de forma confiável sob diversas condições de rede usando múltiplos mecanismos de transporte.
Com o Socket.io, desenvolvedores podem focar na lógica da aplicação sem se preocupar com as complexidades da implementação da comunicação em tempo real.
Criando e Executando um Projeto Socket.io com ServBay 
O ServBay oferece um ambiente pronto para desenvolvedores Node.js, incluindo o runtime do Node.js, o gerenciador de pacotes npm e uma poderosa ferramenta de gerenciamento de sites. Vamos usar esses recursos para configurar e rodar um projeto de exemplo com Socket.io.
Pré-requisitos 
Antes de começar, certifique-se de que:
- Instalou o ServBay: Baixe e instale a versão mais recente do site oficial do ServBay.
- Instalou o pacote Node.js no ServBay: Dentro do ServBay, instale o pacote Node.js, caso ainda não o tenha feito. Você pode instalar e gerenciar pelo painel de controle, na seção “Pacotes” (anteriormente chamada de “Serviços”). Consulte o documento Usando Node.js no ServBay para orientações detalhadas.
Criando um Projeto de Exemplo com Socket.io 
Vamos criar um app de chat simples como exemplo.
- Inicialize o diretório do projeto: - Primeiro, abra seu app de terminal. A recomendação do ServBay é manter os projetos de sites em - /Applications/ServBay/www. Navegue até esse diretório, crie uma pasta para seu projeto, inicialize o Node.js e instale as dependências:bash- cd /Applications/ServBay/www mkdir servbay-socketio-chat cd servbay-socketio-chat npm init -y npm install express socket.io1
 2
 3
 4
 5- Isso cria o arquivo - package.jsonem- servbay-socketio-chate instala as dependências essenciais:- express(para servir arquivos estáticos e lidar com requisições HTTP) e- socket.io(biblioteca do servidor e do cliente).
- Crie o arquivo do servidor ( - server.js):- No diretório raiz do projeto - servbay-socketio-chat, crie um arquivo chamado- server.jse cole o seguinte código. Ele faz o bootstrap do servidor HTTP, integra o Socket.io e gerencia conexões de clientes e broadcast de mensagens.javascript- const express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const path = require('path'); // Importa o módulo path const app = express(); // Cria um servidor HTTP baseado no app express const server = http.createServer(app); // Anexa o Socket.io ao servidor HTTP const io = socketIo(server); // Configura diretório para arquivos estáticos, apontando para o diretório atual app.use(express.static(__dirname)); // Lida com requisições GET na raiz, enviando o arquivo index.html app.get('/', (req, res) => { // Usa path.join para garantir compatibilidade de caminho em diferentes sistemas operacionais res.sendFile(path.join(__dirname, 'index.html')); }); // Escuta eventos de conexão do Socket.io io.on('connection', (socket) => { console.log('um usuário conectou'); // Loga quando um usuário se conecta // Escuta eventos de desconexão socket.on('disconnect', () => { console.log('usuário desconectou'); // Loga quando o usuário desconecta }); // Escuta evento 'chat message' socket.on('chat message', (msg) => { console.log('mensagem: ' + msg); // Exibe a mensagem recebida // Repassa a mensagem para todos os clientes conectados io.emit('chat message', msg); }); }); // Pega a porta do ambiente ou usa 3000 como padrão const port = process.env.PORT || 3000; server.listen(port, () => { console.log(`Servidor rodando na porta ${port}`); console.log(`Acesse em http://localhost:${port} (direto) ou via proxy reverso do ServBay`); });1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43- Descrição do código: - Usamos expresspara criar um servidor web simples e servir oindex.html.
- http.createServer(app)cria o servidor HTTP, base para o Socket.io.
- socketIo(server)inicializa o Socket.io e o conecta ao servidor HTTP.
- io.on('connection', ...)escuta novas conexões de clientes.
- socket.on('disconnect', ...)trata desconexões.
- socket.on('chat message', ...)recebe e processa eventos de mensagem de chat enviados pelos clientes.
- io.emit('chat message', msg)transmite a mensagem recebida para todos os clientes atualmente conectados.
 
- Usamos 
- Crie o arquivo do cliente ( - index.html):- No diretório raiz do projeto, crie o arquivo - index.htmle cole o seguinte conteúdo. Este arquivo traz a estrutura HTML do cliente, estilos CSS e o código JavaScript do cliente Socket.io — para conectar ao servidor, enviar e exibir mensagens.html- <!DOCTYPE html> <html> <head> <title>ServBay Socket.io Chat</title> <style> body { margin: 0; padding-bottom: 3rem; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; } #form { background: rgba(0, 0, 0, 0.15); padding: 0.25rem; position: fixed; bottom: 0; left: 0; right: 0; display: flex; height: 3rem; box-sizing: border-box; backdrop-filter: blur(10px); } #input { border: none; padding: 0 1rem; flex-grow: 1; border-radius: 2rem; margin: 0.25rem; } #input:focus { outline: none; } #form > button { background: #333; border: none; padding: 0 1rem; margin: 0.25rem; border-radius: 3px; outline: none; color: #fff; } #messages { list-style-type: none; margin: 0; padding: 0; } #messages > li { padding: 0.5rem 1rem; } #messages > li:nth-child(odd) { background: #efefef; } .servbay-banner { background-color: #007bff; /* Azul ServBay */ color: white; text-align: center; padding: 15px 0; font-size: 22px; margin-bottom: 20px; font-weight: bold; } </style> </head> <body> <div class="servbay-banner">Bem-vindo(a) ao Demo de Chat com ServBay Socket.io!</div> <ul id="messages"></ul> <form id="form" action=""> <input id="input" autocomplete="off" /><button type="submit">Enviar</button> </form> <!-- Inclui a biblioteca cliente do Socket.io --> <!-- Este arquivo é gerado dinamicamente pelo servidor Socket.io em tempo de execução --> <script src="/socket.io/socket.io.js"></script> <script> // Conecta ao servidor Socket.io // Se cliente e servidor estão no mesmo domínio/porta, io() conecta automaticamente var socket = io(); var form = document.getElementById('form'); var input = document.getElementById('input'); var messages = document.getElementById('messages'); // Obtém o elemento messages form.addEventListener('submit', function(e) { e.preventDefault(); // Impede o envio padrão do formulário if (input.value) { // Envia o evento 'chat message' e o conteúdo ao servidor socket.emit('chat message', input.value); input.value = ''; // Limpa o campo de entrada } }); // Escuta o evento 'chat message' enviado pelo servidor socket.on('chat message', function(msg) { // Cria novo item de lista para exibir mensagem var item = document.createElement('li'); item.textContent = msg; // Usa textContent para prevenir ataques XSS messages.appendChild(item); // Adiciona mensagem à lista // Rola para a última mensagem window.scrollTo(0, document.body.scrollHeight); }); </script> </body> </html>1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64- Descrição do código: - O HTML define uma página simples, com estilos CSS (incluindo banner azul do ServBay), um ul (#messages) para listar mensagens, e um form (#form) para envio.
- <script src="/socket.io/socket.io.js"></script>importa a biblioteca cliente do Socket.io — fornecida automaticamente pelo servidor.
- io()inicializa e conecta ao servidor Socket.io.
- O cliente intercepta o envio do formulário, envia a mensagem via socket.emit('chat message', input.value).
- Escuta por eventos 'chat message'do servidor, adiciona as mensagens ao chat para visualização.
 
- O HTML define uma página simples, com estilos CSS (incluindo banner azul do ServBay), um ul (
Pronto! O código base do projeto está feito. Agora vamos executar e acessar o projeto usando o ServBay.
Executando o Projeto com ServBay (Modo Desenvolvimento) 
No desenvolvimento, normalmente iniciamos o servidor Node.js diretamente e mapeamos seu acesso para um domínio local via proxy reverso no ServBay.
- Inicie o servidor de desenvolvimento Node.js: - Abra o terminal, acesse o diretório - /Applications/ServBay/www/servbay-socketio-chate execute:bash- cd /Applications/ServBay/www/servbay-socketio-chat PORT=8585 node server.js1
 2- O servidor irá indicar no terminal algo como - Servidor rodando na porta 8585. O app estará escutando na porta 8585 localmente.
- Configure o site (proxy reverso) no ServBay: - Para facilitar o acesso por domínio local e usar HTTPS/SSL, crie um site proxy reverso no ServBay: - Abra o painel do ServBay.
- Vá para “Sites” (anteriormente “Hosts”).
- Clique no botão de adicionar novo site.
- Preenchimento sugerido: - Nome: ServBay Socket.io Dev(ou nome de sua escolha)
- Domínios: servbay-socketio-dev.servbay.demo(ou outro domínio.servbay.demo)
- Tipo de site: Selecione Proxy Reverso
- Destino do Proxy: http://127.0.0.1:8585(apontando para sua instância Node.js)
 
- Nome: 
- Salve. O ServBay aplicará as configurações e poderá reiniciar o servidor web (Caddy ou Nginx, conforme opção).
 - Atenção: O proxy reverso é fundamental para Socket.io, pois além de encaminhar requisições HTTP, trata corretamente a atualização para o protocolo WebSocket. O Caddy/Nginx integrado ao ServBay já configura o proxy para suportar WebSockets por padrão. - Para instruções detalhadas, confira Adicionando site Node.js de Desenvolvimento. Se desejar HTTPS para o domínio local, siga o guia Protegendo site com SSL/TLS. O ServBay User CA e o ServBay Public CA ajudam a gerar e confiar em certificados SSL locais. 
- Acesse o site em modo desenvolvimento: - No navegador, acesse o domínio local configurado, - https://servbay-socketio-dev.servbay.demo. Você verá a interface do chat e poderá testar o tempo real abrindo em várias abas ou dispositivos.
Implantando o Projeto no ServBay (Modo Produção) 
No ambiente de produção, recomenda-se executar o app Node.js de forma robusta (usando gerenciadores de processos como PM2/forever) e integrá-lo ao ServBay. Mostramos a seguir como configurar o proxy reverso do ServBay, assumindo que seu Node.js já esteja rodando estável numa porta específica.
- Inicie o servidor de produção do Node.js: - Use um gerenciador de processos como o PM2 no ambiente de produção: bash- # Se ainda não tiver o PM2 instalado # npm install pm2 -g cd /Applications/ServBay/www/servbay-socketio-chat PORT=8586 NODE_ENV=production pm2 start server.js --name servbay-socketio-prod1
 2
 3
 4
 5- O comando acima inicia o - server.jscom o PM2, define a porta 8586 e seta a variável de ambiente- NODE_ENVcomo produção. O PM2 garante o app executando em segundo plano e reinício automático em caso de falha.
- Configure o site de produção (proxy reverso) no ServBay: - Repita o processo do modo desenvolvimento, criando um novo site proxy reverso no ServBay mirando a porta do ambiente de produção: - Abra o painel do ServBay.
- Acesse a seção “Sites”.
- Clique para adicionar novo site.
- Dados sugeridos: - Nome: ServBay Socket.io Prod(ou outro nome)
- Domínios: servbay-socketio-prod.servbay.demo(ou domínio customizado.servbay.demo)
- Tipo de site: Proxy Reverso
- Destino do Proxy: http://127.0.0.1:8586(porta do Node.js em produção)
 
- Nome: 
- Salve.
 
- Acesse o site em modo produção: - No navegador, vá para o domínio local configurado: - https://servbay-socketio-prod.servbay.demo.
Com o proxy reverso do ServBay, é fácil gerenciar múltiplos apps Node.js (em desenvolvimento ou produção), designando domínios e SSL sem precisar mexer em hosts do sistema ou ajustes complexos no servidor web.
Conectando a Bancos de Dados do ServBay 
O ServBay suporta diversos bancos de dados: MySQL, MariaDB, PostgreSQL, MongoDB e Redis. Seu app Socket.io pode se integrar a qualquer um deles para armazenar usuários, histórico de mensagens, etc. Veja exemplos de conexão usando Node.js.
Importante: Antes de rodar os exemplos, certifique-se de instalar e iniciar o respectivo banco de dados pelo painel do ServBay. Verifique dados de conexão (porta, usuário e senha padrão) no painel ou na documentação. O root do MySQL/MariaDB geralmente usa a senha definida na instalação do ServBay — você pode redefinir pelo painel, se necessário.
- Conectando ao MongoDB: - Instale o Mongoose (ou driver oficial - mongodb):bash- npm install mongoose1- No seu código Node.js (por exemplo, em - server.jsou módulo dedicado):javascript- const mongoose = require('mongoose'); // Conecta ao MongoDB local rodando na porta 27017 (padrão) // Nome do banco: servbay_socketio_app (exemplo) mongoose.connect('mongodb://localhost:27017/servbay_socketio_app', { useNewUrlParser: true, useUnifiedTopology: true, // Para autenticação, preencha user, pass se necessário // user: 'seu_usuario_mongo', // pass: 'sua_senha_mongo' }) .then(() => console.log('MongoDB conectado com sucesso via Mongoose')) .catch(err => console.error('Erro ao conectar ao MongoDB:', err)); // Defina Schemas e Models usando mongoose.model() // ...1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
- Conectando ao Redis: - Instale o cliente Redis: bash- npm install redis1- No seu código: javascript- const redis = require('redis'); // Cria client Redis conectando ao localhost:6379 (padrão) const client = redis.createClient({ // Para autenticação, preencha password, se necessário // password: 'sua_senha_redis', // url: 'redis://localhost:6379' }); client.on('error', (err) => { console.error('Erro ao conectar ao Redis:', err); }); client.on('connect', () => { console.log('Redis conectado com sucesso'); }); // Conecta ao servidor Redis client.connect(); // Para Redis v4+, chame connect() // Agora você pode executar comandos Redis com o client // Exemplo: await client.set('mykey', 'myvalue'); // ...1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
- Conectando ao MariaDB / MySQL: - O ServBay suporta ambos. Usaremos o pacote - mariadb(compatível com MySQL).- Instale o cliente: bash- npm install mariadb1- No seu código: javascript- const mariadb = require('mariadb'); // Cria pool de conexões const pool = mariadb.createPool({ host: 'localhost', port: 3306, // Porta padrão user: 'root', // Usuário padrão do ServBay password: 'password', // Substitua pela senha definida no ServBay database: 'servbay_socketio_app', // Nome do banco (exemplo) connectionLimit: 5 // Tamanho do pool }); // Testa a conexão pool.getConnection() .then(conn => { console.log("Conectado com sucesso ao MariaDB/MySQL"); conn.release(); // Pool pronto para queries, ex: await pool.query("SELECT 1"); // ... }) .catch(err => { console.error("Erro ao conectar ao MariaDB/MySQL:", err); });1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23- Atenção: Troque - passwordpela senha real definida para o root no ServBay. Para produção, crie usuários próprios para o app em vez de utilizar o root.
- Conectando ao PostgreSQL: - Instale o cliente: bash- npm install pg1- No seu código: javascript- const { Pool } = require('pg'); // Cria pool de conexões const pool = new Pool({ user: 'user', // Usuário configurado host: 'localhost', database: 'servbay_socketio_app', // Nome do banco (exemplo) password: 'password', // Senha definida no ServBay port: 5432, // Porta padrão PostgreSQL }); // Testa conexão pool.connect((err, client, done) => { if (err) { console.error('Erro ao conectar ao PostgreSQL:', err); return; } console.log('Conectado com sucesso ao PostgreSQL'); client.release(); // Pool pronto para queries, ex: pool.query('SELECT NOW()', (err, res) => { ... }); // ... });1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22- Atenção: Substitua - usere- passwordpelo usuário e senha configurados para o PostgreSQL no ServBay.
Com essa integração, você poderá persistir dados e enriquecer seu app Socket.io. O ServBay agiliza todo o ambiente de desenvolvimento Node.js com bancos de dados em sua máquina local.
Observações Importantes 
- Conflito de portas: Certifique-se de que a porta definida para seu app Node.js (por exemplo, 8585 ou 8586) não esteja sendo usada por outro serviço. Caso haja conflito, basta alterar o valor da porta via variável PORT.
- Configuração de sites no ServBay: Após configurar um site proxy reverso, garanta que o servidor web do ServBay (Caddy/Nginx) tenha sido reiniciado e as mudanças aplicadas.
- Proxy de WebSocket: O ServBay, por padrão, suporta WebSockets no proxy reverso. Em caso de problemas, cheque os logs do servidor web e certifique-se que a configuração de proxy está correta.
- Firewall: Assegure que o firewall do sistema não bloqueie as portas utilizadas pelo ServBay (80, 443) nem as portas dos apps Node.js.
