Ответ
WebSocket — это протокол для создания постоянного двустороннего канала связи между клиентом (браузером) и сервером. В контексте Node.js он критически важен для приложений реального времени, где HTTP с его запрос-ответной моделью неэффективен.
Ключевые преимущества перед HTTP:
- Низкая задержка: Данные передаются мгновенно, без необходимости ждать нового HTTP-запроса от клиента (как при Long Polling).
- Эффективность: После первоначального handshake (также через HTTP) устанавливается одно TCP-соединение, которое остаётся открытым. Это устраняет накладные расходы на повторные заголовки и установку соединения для каждого сообщения.
- Полнодуплексная связь: Сервер может отправлять данные клиенту в любой момент, независимо от активности клиента, и наоборот.
Пример реализации сервера на Node.js с библиотекой ws:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
console.log('Новое подключение установлено');
ws.on('message', function incoming(message) {
console.log('Получено от клиента: %s', message);
// Широковещательная рассылка сообщения всем подключённым клиентам
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(`Клиент сказал: ${message}`);
}
});
});
ws.send('Добро пожаловать на WebSocket сервер!');
});
Типичные сценарии использования в Node.js:
- Чат-приложения и системы уведомлений.
- Онлайн-панели мониторинга (дашборды) с live-данными.
- Многопользовательские онлайн-игры и коллаборативные инструменты (совместное редактирование).
- Финансовые или спортивные тикеры с потоковой передачей данных.