WebSocket библиотеки для Node.js: ws, Socket.IO, uWS — полный обзор

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

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

Начать курс

WebSocket библиотеки для Node.js: ws, Socket.IO и µWebSockets

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

1. Библиотека ws — лёгкая и высокопроизводительная

ws — самая популярная и быстрая WebSocket-библиотека для Node.js. Она реализует чистый протокол WebSocket без дополнительных надстроек, что даёт минимальный overhead и максимальную скорость.

Установка

npm install ws

Пример: эхо-сервер

const WebSocket = require('ws');

const server = new WebSocket.Server({ port: 8080 });

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

  ws.on('message', (message) => {
    console.log(`Получено: ${message}`);
    ws.send(`Эхо: ${message}`);
  });

  ws.on('close', () => {
    console.log('Клиент отключился');
  });
});

console.log('WebSocket сервер запущен на ws://localhost:8080');

Клиентская часть (браузер)

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

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

socket.onmessage = (event) => {
  console.log('Ответ от сервера:', event.data);
};

socket.onerror = (error) => {
  console.error('Ошибка WebSocket:', error);
};

Особенности ws:

  • Производительность: до 2-3 раз быстрее Socket.IO в тестах на throughput.
  • Минимализм: нет встроенных механизмов переподключения, комнат или fallback-транспортов.
  • Поддержка: полная совместимость с RFC 6455.
  • Использование: идеально для real-time приложений, где критична скорость (биржевые данные, игры, чаты высокой нагрузки).

2. Socket.IO — удобство и надёжность для продакшена

Socket.IO — это не просто WebSocket-библиотека, а целый фреймворк для real-time приложений. Он добавляет поверх WebSocket: автоматическое переподключение, комнаты, пространства имён, fallback на long-polling (если WebSocket не поддерживается) и удобный API.

Установка

npm install socket.io

Пример: простой чат-сервер

const http = require('http');
const { Server } = require('socket.io');

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

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

  socket.on('chat message', (msg) => {
    console.log(`Сообщение: ${msg}`);
    io.emit('chat message', msg); // рассылаем всем
  });

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

server.listen(3000, () => {
  console.log('Socket.IO сервер на http://localhost:3000');
});

Клиентская часть (браузер)

<script src="/socket.io/socket.io.js"></script>
<script>
  const socket = io('http://localhost:3000');

  socket.on('connect', () => {
    console.log('Подключено к серверу');
    socket.emit('chat message', 'Привет всем!');
  });

  socket.on('chat message', (msg) => {
    const item = document.createElement('li');
    item.textContent = msg;
    document.getElementById('messages').appendChild(item);
  });
</script>

Особенности Socket.IO:

  • Автоматическое переподключение: при разрыве соединения клиент сам пытается восстановить связь.
  • Комнаты (Rooms): можно создавать логические группы для рассылки.
  • Пространства имён (Namespaces): изоляция логики на одном порту.
  • Fallback-транспорты: если WebSocket не работает, используется HTTP long-polling.
  • Подходит: для чатов, уведомлений, коллаборативных редакторов, где важна устойчивость соединения.

3. µWebSockets (uWS) — экстремальная производительность

µWebSockets (uWS) — это библиотека, написанная на

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