WebSocket библиотеки TypeScript: ws и Socket.IO – полное руководство

Онлайн-тренажер Python для начинающих

Изучайте Python легко и без перегрузки теорией. Решайте практические задачи с автоматической проверкой, получайте подсказки на русском языке и пишите код прямо в браузере — без необходимости что-либо устанавливать.

Начать курс

WebSocket библиотеки TypeScript: ws и Socket.IO

WebSocket — это протокол, обеспечивающий двустороннюю связь в реальном времени между клиентом и сервером. В экосистеме TypeScript/Node.js наиболее популярными библиотеками для работы с WebSocket являются ws (легковесная) и Socket.IO (с дополнительными возможностями). В этой статье мы подробно рассмотрим обе библиотеки, их установку, базовое использование и примеры кода на TypeScript.

1. Библиотека ws

ws — это минималистичная и быстрая WebSocket библиотека для Node.js, полностью совместимая с TypeScript. Она предоставляет чистый WebSocket API без лишних абстракций.

Установка

npm install ws
npm install -D @types/ws

Создание WebSocket сервера на TypeScript

import { WebSocketServer, WebSocket } from 'ws';

const wss = new WebSocketServer({ port: 8080 });

wss.on('connection', (ws: WebSocket) => {
  console.log('Клиент подключен');

  // Отправка сообщения клиенту
  ws.send('Добро пожаловать!');

  // Обработка входящих сообщений
  ws.on('message', (data: Buffer) => {
    const message = data.toString();
    console.log(`Получено: ${message}`);

    // Отправка ответа всем подключенным клиентам
    wss.clients.forEach((client) => {
      if (client.readyState === WebSocket.OPEN) {
        client.send(`Эхо: ${message}`);
      }
    });
  });

  // Обработка закрытия соединения
  ws.on('close', () => {
    console.log('Клиент отключен');
  });
});

console.log('WebSocket сервер запущен на порту 8080');

Клиентский код на TypeScript

const ws = new WebSocket('ws://localhost:8080');

ws.onopen = () => {
  console.log('Подключение установлено');
  ws.send('Привет, сервер!');
};

ws.onmessage = (event: MessageEvent) => {
  console.log(`Ответ от сервера: ${event.data}`);
};

ws.onclose = () => {
  console.log('Соединение закрыто');
};

2. Библиотека Socket.IO

Socket.IO — это более высокоуровневая библиотека, построенная поверх WebSocket. Она добавляет:

  • Автоматическое переподключение при обрыве связи
  • Поддержка комнат и пространств имен (namespaces)
  • Механизм fallback (переход на HTTP long-polling, если WebSocket недоступен)
  • Встроенная поддержка событий (events)

Установка

npm install socket.io socket.io-client
npm install -D @types/socket.io @types/socket.io-client

Сервер на TypeScript с Socket.IO

import { Server } from 'socket.io';
import http from 'http';

const server = http.createServer();
const io = new Server(server, {
  cors: {
    origin: '*',
    methods: ['GET', 'POST']
  }
});

io.on('connection', (socket) => {
  console.log(`Пользователь подключен: ${socket.id}`);

  // Присоединение к комнате
  socket.on('join_room', (room: string) => {
    socket.join(room);
    console.log(`Socket ${socket.id} присоединился к комнате ${room}`);
  });

  // Обработка пользовательского события
  socket.on('chat_message', (data: { room: string; message: string }) => {
    // Отправка сообщения всем в комнате, кроме отправителя
    socket.to(data.room).emit('chat_message', {
      userId: socket.id,
      message: data.message
    });
  });

  socket.on('disconnect', () => {
    console.log(`Пользователь отключен: ${socket.id}`);
  });
});

server.listen(3000, () => {
  console.log('Socket.IO сервер запущен на порту 3000');
});

Клиент на TypeScript с Socket.IO

import { io, Socket } from 'socket.io-client';

const socket: Socket = io('http://localhost:3000');

socket.on('connect', () => {
  console.log('Подключено к серверу');

  // Присоединиться к комнате
  socket.emit('join_room', 'room_1');
});

socket.on('chat_message', (data: { userId: string; message: string }) => {
  console.log(`Сообщение от ${data.userId}: ${data.message}`);
});

// Отправка сообщения
socket.emit('chat_message', {
  room: 'room_1',
  message: 'Всем привет!'
});

3. Сравнение ws и Socket.IO

Характеристика ws Socket.IO
Размер Маленький (~30 KB) Боль

Рекомендаций