Programación de redes en TypeScript: de sockets a WebSocket

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Programación de redes en TypeScript: de sockets a WebSocket

\n\n

Cuando hablamos de programación de redes en TypeScript, a menudo imaginamos sistemas distribuidos complejos, chats en tiempo real o servidores de juegos. Y no es casualidad: TypeScript con su tipado estricto y capacidades de análisis estático hace que el desarrollo de aplicaciones de red no solo sea seguro, sino también verdaderamente conveniente.

\n\n

En este artículo, analizaremos cómo crear aplicaciones cliente-servidor en TypeScript utilizando los módulos integrados de Node.js — net y dgram — así como bibliotecas para trabajar con WebSocket. Obtendrá ejemplos de código listos para usar que puede aplicar inmediatamente en sus proyectos.

\n\n

¿Por qué TypeScript para programación de redes?

\n\n

Muchos desarrolladores están acostumbrados a usar JavaScript para el backend, pero la programación de redes con TypeScript ofrece varias ventajas:

\n\n
    \n
  • Tipado de datos — define de antemano la estructura de los paquetes y mensajes
  • \n
  • Autocompletado — el IDE sugiere los métodos de los sockets y sus parámetros
  • \n
  • Menos errores — el compilador detecta inconsistencias de tipos antes de la ejecución
  • \n
\n\n

Veamos un ejemplo real. Imagine que estamos escribiendo un servidor TCP. En JavaScript escribiría:

\n\n
const server = require('net').createServer(socket => {\n  socket.on('data', data => {\n    // data — es un Buffer, hay que recordarlo\n  });\n});
\n\n

En TypeScript, en cambio, obtenemos 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    // El tipo Buffer es conocido, trabajamos con confianza\n  });\n});
\n\n

Parece un detalle, pero en proyectos grandes esta diferencia ahorra horas de depuración.

\n\n

Fundamentos: Servidor y cliente TCP en TypeScript

\n\n

Empecemos con lo clásico: TCP. Crearemos un servidor eco simple que devuelve al cliente lo que recibe.

\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(`Recibido: ${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('Error de socket:', err.message);\n  });\n});\n\nserver.listen(PORT, HOST, () => {\n  console.log(`Servidor TCP iniciado en ${HOST}:${PORT}`);\n});
\n\n

Observe: tipificamos todas las variables — server, socket, data, err. Esto nos permite ver qué métodos están disponibles en el socket y evitar errores accidentales.

\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 al servidor');\n  client.write('¡Hola, servidor!');\n});\n\nclient.on('data', (data: Buffer) => {\n  console.log('Respuesta del servidor:', data.toString());\n  client.destroy();\n});\n\nclient.on('close', () => {\n  console.log('Conexión cerrada');\n});
\n\n

Este código se puede ejecutar en cualquier proyecto de Node.js con TypeScript. Simplemente instale @types/node y compile.

\n\n

UDP: cuando la velocidad es más importante que la fiabilidad

\n\n

Si necesita transmitir datos sin establecer una conexión (por ejemplo, para streaming o juegos), use sockets UDP en TypeScript. El módulo dgram proporciona todo lo necesario.

\n\n

Servidor UDP

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

Blogs

Book Recommendations