Por que JavaScript na programação de rede?
Antigamente, JavaScript era apenas uma linguagem para animar botões e validar formulários. Hoje, é uma ferramenta poderosa para criar aplicações de rede. Programação de rede em JavaScript abre portas para o mundo em tempo real: chats, jogos online, streaming de dados, sistemas de monitoramento e até mesmo servidores web próprios.
Neste artigo, não vamos reescrever a documentação de forma tediosa. Vamos percorrer o caminho de uma simples requisição HTTP até uma conexão WebSocket completa. Você verá como o Node.js transforma uma linguagem de navegador em um motor de rede poderoso. Pronto? Vamos lá!
Fundamentos: HTTP e módulos do Node.js
Qualquer programação de rede em JavaScript começa com a compreensão dos protocolos. O mais popular é o HTTP. No navegador, você usa fetch() ou XMLHttpRequest, mas o lado do servidor exige uma abordagem diferente.
Criando um servidor HTTP simples
O Node.js fornece o módulo embutido http. Aqui está um exemplo mínimo que responde "Olá, mundo!" a qualquer requisição:
const http = require('http');
const server = http.createServer((req, res) => { res.statusCode = 200; res.setHeader('Content-Type', 'text/plain'); res.end('Olá, mundo! Programação de rede em JavaScript funcionando!');});
server.listen(3000, '127.0.0.1', () => { console.log('Servidor rodando em http://127.0.0.1:3000/');});Execute este código com node server.js e abra o navegador. Você verá nossa mensagem. Simples, certo? Mas isso é só o começo. A verdadeira mágica acontece quando trabalhamos com sockets.
Trabalhando com sockets TCP em JavaScript
HTTP é um protocolo de camada de aplicação construído sobre TCP. Se você precisa de controle total sobre a transmissão de dados, use sockets JavaScript. No Node.js, o módulo net é responsável por isso.
Servidor TCP: recebendo dados
Imagine que você está escrevendo um servidor echo simples. O cliente se conecta, envia uma mensagem, e o servidor a retorna. Veja como fica:
const net = require('net');
const server = net.createServer((socket) => { console.log('Cliente conectado');
socket.on('data', (data) => { console.log('Recebido:', data.toString()); socket.write('Echo: ' + data.toString()); });
socket.on('end', () => { console.log('Cliente desconectado'); });});
server.listen(8080, () => { console.log('Servidor TCP ouvindo na porta 8080');});Agora vamos escrever um cliente para este servidor. Cliente-servidor em JavaScript é uma via de mão dupla:
const net = require('net');
const client = net.createConnection({ port: 8080 }, () => { console.log('Conectado ao servidor'); client.write('Olá, servidor!');});
client.on('data', (data) => { console.log('Resposta do servidor:', data.toString()); client.end();});
client.on('end', () => { console.log('Desconectado do servidor');});Execute primeiro o servidor, depois o cliente. Você verá os dados viajando de um lado para o outro. Esta é a base de todos os protocolos de rede JavaScript.
WebSocket: tempo real sem atrasos
HTTP e TCP são bons, mas têm um problema: para obter novos dados, o cliente precisa fazer requisições constantemente (polling). Isso é ineficiente. WebSocket em JavaScript resolve esse problema — após estabelecer a conexão, o próprio servidor pode enviar dados a qualquer momento.
WebSocket no Node.js (biblioteca ws)
Instale a biblioteca: npm install ws
Servidor:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8081 });
wss.on('connection', (ws) => { console.log('Cliente WebSocket conectado');
ws.on('message', (message) => { console.log('Recebido:',