Realtime · Урок 37

WebSocket и realtime

HTTP — это «спросил — ответили». WebSocket — это открытая труба: сервер сам шлёт данные, когда они появились. Отсюда чаты, лайв-уведомления и котировки без перезагрузки.

Как это устроено

Один раз клиент устанавливает соединение (handshake), и дальше обе стороны шлют сообщения по нему. На сервере поднимаем WebSocket рядом с Express, на клиенте — подключаемся к нему.

// Сервер: Node + ws
const { WebSocketServer } = require("ws");
const wss = new WebSocketServer({ port: 8080 });

wss.on("connection", (ws) => {
  ws.send(JSON.stringify({ type: "welcome", text: "Привет!" }));
  ws.on("message", (msg) => {
    // рассылаем всем подписчикам
    wss.clients.forEach((c) => c.send(msg.toString()));
  });
});

// Клиент
const socket = new WebSocket("ws://localhost:8080");
socket.onmessage = (e) => console.log("Получено:", JSON.parse(e.data));
💡
sse (Server-Sent Events) — односторонний вариант: сервер шлёт, клиент только слушает. Для ленты новостей или прогресса загрузки проще, чем WebSocket.

Где применять

ℹ️
Помните про reconnect и обработку разрыва: сеть мобильных «плавает». Простая стратегия — заново подключаться с небольшой паузой при закрытии сокета.