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 и обработку разрыва: сеть мобильных «плавает». Простая стратегия — заново подключаться с небольшой паузой при закрытии сокета.