Criando e Executando Projeto Socket.io
O que é Socket.io?
Socket.io é uma biblioteca JavaScript para comunicação bidirecional em tempo real. Ela estabelece um canal de comunicação eficiente e de baixa latência entre navegador e servidor. Socket.io suporta o protocolo WebSocket, mas não se limita a isso, podendo selecionar automaticamente o melhor mecanismo de transporte (como long-polling) para assegurar a estabilidade da conexão.
Principais Características e Vantagens do Socket.io
- Comunicação em Tempo Real: Suporta comunicação bidirecional em tempo real, ideal para chats, jogos online, notificações em tempo real e outros cenários.
- Suporte Multiplataforma: Pode rodar no navegador, Node.js e outras plataformas.
- Reconexão Automática: Tenta reconectar automaticamente quando a conexão é perdida.
- Eventos Dirigidos: Utiliza um modelo baseado em eventos para simplificar a programação.
- Alta Compatibilidade: Suporta vários mecanismos de transporte como WebSocket, long-polling XHR, etc., garantindo funcionamento em diferentes ambientes de rede.
Com o Socket.io, os desenvolvedores conseguem construir rapidamente aplicações de comunicação em tempo real eficazes.
Criando e Executando Projeto Socket.io com ServBay
Neste artigo, usaremos o ambiente Node.js fornecido pela ServBay para criar e executar um projeto Socket.io. Utilizaremos o recurso 'Host' do ServBay para configurar o servidor web e acessar o projeto por meio de proxy reverso.
Criando o Projeto Socket.io
Inicializar o Projeto
Primeiro, certifique-se de que você já instalou o ambiente Node.js fornecido pelo ServBay. Em seguida, crie um novo projeto Socket.io no diretório raiz do website sugerido pelo ServBay
/Applications/ServBay/www
:bashcd /Applications/ServBay/www mkdir servbay-socketio-app cd servbay-socketio-app npm init -y npm install express socket.io
1
2
3
4
5Criar o Arquivo do Servidor
No diretório raiz do projeto, crie um arquivo
server.js
e adicione o seguinte código:javascriptconst express = require('express'); const http = require('http'); const socketIo = require('socket.io'); const app = express(); const server = http.createServer(app); const io = socketIo(server); app.get('/', (req, res) => { res.sendFile(__dirname + '/index.html'); }); io.on('connection', (socket) => { console.log('usuário conectado'); socket.on('disconnect', () => { console.log('usuário desconectado'); }); socket.on('chat message', (msg) => { io.emit('chat message', msg); }); }); const port = process.env.PORT || 3000; server.listen(port, () => { console.log(`Servidor rodando na porta ${port}`); });
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
26Criar o Arquivo Cliente
No diretório raiz do projeto, crie um arquivo
index.html
e adicione o seguinte código:html<!DOCTYPE html> <html> <head> <title>Socket.io Chat com ServBay</title> <style> ul { list-style-type: none; padding: 0; } li { padding: 8px; margin-bottom: 10px; background-color: #f3f3f3; } input { padding: 10px; width: 300px; } button { padding: 10px; } .servbay-banner { background-color: #4CAF50; color: white; text-align: center; padding: 10px 0; font-size: 20px; margin-bottom: 20px; } </style> </head> <body> <div class="servbay-banner">Bem-vindo ao Chat Socket.io com ServBay!</div> <ul id="messages"></ul> <form id="form" action=""> <input id="input" autocomplete="off" /><button>Enviar</button> </form> <script src="/socket.io/socket.io.js"></script> <script> var socket = io(); var form = document.getElementById('form'); var input = document.getElementById('input'); form.addEventListener('submit', function(e) { e.preventDefault(); if (input.value) { socket.emit('chat message', input.value); input.value = ''; } }); socket.on('chat message', function(msg) { var item = document.createElement('li'); item.textContent = msg; document.getElementById('messages').appendChild(item); 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
Entrando no Modo de Desenvolvimento
Executar Servidor de Desenvolvimento
Inicie o servidor de desenvolvimento e especifique a porta (por exemplo: 8585):
bashPORT=8585 node server.js
1Isso iniciará um servidor de desenvolvimento local e exporá a porta 8585.
Configurar Proxy Reverso no ServBay
Use a função 'Host' do ServBay para acessar o servidor de desenvolvimento via proxy reverso. Nas configurações de 'Host' do ServBay, adicione um novo proxy reverso:
- Nome:
Meu primeiro site dev do Socket.io
- Domínio:
servbay-socketio-test.dev
- Tipo de Host:
Proxy Reverso
- IP:
127.0.0.1
- Porta:
8585
Para mais etapas de configuração, consulte adicionar website de desenvolvimento Nodejs.
- Nome:
Acessar o Modo de Desenvolvimento
Abra o navegador e acesse
https://servbay-socketio-test.dev
para visualizar o projeto em tempo real. Com o suporte do ServBay para domínios personalizados e certificados SSL gratuitos, você terá maior segurança.
Desplegando a Versão de Produção
Preparar o Ambiente de Produção
Certifique-se de que seu projeto pode funcionar corretamente no ambiente de produção. Normalmente, projetos Socket.io não precisam de etapas especiais de build, mas você pode precisar configurar algumas variáveis de ambiente ou outras configurações.
Executar Servidor de Produção
Inicie o servidor de produção e especifique a porta (por exemplo: 8586):
bashPORT=8586 NODE_ENV=production node server.js
1Configurar Proxy Reverso no ServBay
Use a função 'Host' do ServBay para acessar o servidor de produção via proxy reverso. Nas configurações de 'Host' do ServBay, adicione um novo proxy reverso:
- Nome:
Meu primeiro site de produção do Socket.io
- Domínio:
servbay-socketio-test.prod
- Tipo de Host:
Proxy Reverso
- IP:
127.0.0.1
- Porta:
8586
- Nome:
Acessar o Modo de Produção
Abra o navegador e acesse
https://servbay-socketio-test.prod
para visualizar a versão de produção. Com o domínio personalizado e o certificado SSL gratuito do ServBay, seu site será mais seguro e confiável.
Conexão com o Banco de Dados
O ServBay oferece suporte para Redis, MariaDB, PostgreSQL e MongoDB. Aqui está um exemplo de como conectar a esses bancos de dados.
Conectar ao MongoDB
Instale
mongoose
:bashnpm install mongoose
1Em seguida, no projeto, importe e conecte:
javascriptconst mongoose = require('mongoose'); mongoose.connect('mongodb://localhost/servbay-socketio-app', { useNewUrlParser: true, useUnifiedTopology: true }) .then(() => console.log('MongoDB conectado')) .catch(err => console.log(err));
1
2
3
4
5Conectar ao Redis
Instale
redis
:bashnpm install redis
1Em seguida, no projeto, importe e conecte:
javascriptconst redis = require('redis'); const client = redis.createClient(); client.on('error', function (err) { console.log('Erro ' + err); }); client.on('connect', function () { console.log('Cliente Redis conectado'); });
1
2
3
4
5
6
7
8
9
10Conectar ao MariaDB
Instale
mariadb
:bashnpm install mariadb
1Em seguida, no projeto, importe e conecte:
javascriptconst mariadb = require('mariadb'); const pool = mariadb.createPool({ host: 'localhost', user: 'root', password: 'password', database: 'servbay_socketio_app' }); pool.getConnection() .then(conn => { console.log("Conectado ao MariaDB"); conn.release(); //release to pool }) .catch(err => { console.log("Não conectado devido ao erro: " + err); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16Conectar ao PostgreSQL
Instale
pg
:bashnpm install pg
1Em seguida, no projeto, importe e conecte:
javascriptconst { Pool } = require('pg'); const pool = new Pool({ user: 'user', host: 'localhost', database: 'servbay_socketio_app', password: 'password', port: 5432, }); pool.connect((err, client, done) => { if (err) throw err; console.log('Conectado ao PostgreSQL'); done(); });
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Seguindo os passos acima, você terá criado e executado com sucesso um projeto Socket.io, utilizando as funcionalidades fornecidas pelo ServBay para gerenciar e acessar seu projeto, além de se conectar a diversos bancos de dados.