Programação de Rede em TypeScript: de Sockets a WebSocket

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Programação de Rede em TypeScript: de Sockets a WebSocket

\n\n

Quando falamos sobre programação de rede em TypeScript, muitas vezes imaginamos sistemas distribuídos complexos, chats em tempo real ou servidores de jogos. E não é por acaso: o TypeScript, com sua tipagem estrita e recursos de análise estática, torna o desenvolvimento de aplicações de rede não apenas seguro, mas verdadeiramente conveniente.

\n\n

Neste artigo, vamos explorar como criar aplicações cliente-servidor em TypeScript, usando os módulos internos do Node.js — net e dgram — bem como bibliotecas para trabalhar com WebSocket. Você obterá exemplos de código prontos que podem ser aplicados imediatamente em projetos.

\n\n

Por que TypeScript para programação de rede?

\n\n

Muitos desenvolvedores estão acostumados a usar JavaScript para backend, mas a programação de rede em TypeScript oferece várias vantagens:

\n\n
    \n
  • Tipagem de dados — você define antecipadamente a estrutura dos pacotes e mensagens
  • \n
  • Autocompletar — a IDE sugere métodos de sockets e seus parâmetros
  • \n
  • Menos erros — o compilador detecta incompatibilidades de tipos antes da execução
  • \n
\n\n

Vamos ver um exemplo real. Imagine que estamos escrevendo um servidor TCP. Em JavaScript, você escreveria:

\n\n
const server = require('net').createServer(socket => {\n  socket.on('data', data => {\n    // data — é um Buffer, é preciso lembrar disso\n  });\n});
\n\n

Em TypeScript, obtemos tipos claros:

\n\n
import * as net from 'net';\n\nconst server: net.Server = net.createServer((socket: net.Socket) => {\n  socket.on('data', (data: Buffer) => {\n    // O tipo Buffer é conhecido, trabalhamos com confiança\n  });\n});
\n\n

Parece um detalhe, mas em grandes projetos essa diferença economiza horas de depuração.

\n\n

Fundamentos: Servidor e Cliente TCP em TypeScript

\n\n

Vamos começar com o clássico — TCP. Criaremos um simples servidor eco, que retorna ao cliente o que recebeu.

\n\n

Servidor TCP

\n\n
import * as net from 'net';\n\nconst PORT: number = 3000;\nconst HOST: string = '127.0.0.1';\n\nconst server: net.Server = net.createServer((socket: net.Socket) => {\n  console.log(`Cliente conectado: ${socket.remoteAddress}:${socket.remotePort}`);\n\n  socket.on('data', (data: Buffer) => {\n    const message: string = data.toString().trim();\n    console.log(`Recebido: ${message}`);\n    socket.write(`Eco: ${message}\\n`);\n  });\n\n  socket.on('end', () => {\n    console.log('Cliente desconectado');\n  });\n\n  socket.on('error', (err: Error) => {\n    console.error('Erro no socket:', err.message);\n  });\n});\n\nserver.listen(PORT, HOST, () => {\n  console.log(`Servidor TCP iniciado em ${HOST}:${PORT}`);\n});
\n\n

Observe: tipificamos todas as variáveis — server, socket, data, err. Isso nos permite ver quais métodos estão disponíveis no socket e evitar erros acidentais.

\n\n

Cliente TCP

\n\n
import * as net from 'net';\n\nconst client: net.Socket = new net.Socket();\n\nclient.connect(3000, '127.0.0.1', () => {\n  console.log('Conectado ao servidor');\n  client.write('Olá, servidor!');\n});\n\nclient.on('data', (data: Buffer) => {\n  console.log('Resposta do servidor:', data.toString());\n  client.destroy();\n});\n\nclient.on('close', () => {\n  console.log('Conexão fechada');\n});
\n\n

Este código pode ser executado em qualquer projeto Node.js com TypeScript. Basta instalar @types/node e compilar.

\n\n

UDP: quando a velocidade é mais importante que a confiabilidade

\n\n

Se você precisa transmitir dados sem estabelecer conexão (por exemplo, para streaming ou jogos), use sockets UDP em TypeScript. O módulo dgram fornece tudo o que é necessário.

\n\n

Servidor UDP

\n\n
import * as dgram from 'dgram';\n\nconst server: dgram.Socke                

Blogs

Book Recommendations