StudyCode
Поллинг — клиент периодически спрашивает сервер «есть новое?»: просто в реализации, но задержка равна интервалу опроса, а большинство запросов возвращают пустоту — лишняя нагрузка. WebSocket — постоянное двустороннее соединение: начинается как HTTP-запрос с заголовком Upgrade: websocket, после ответа 101 Switching Protocols обе стороны шлют сообщения в любой момент без задержки. Поллинга достаточно для редких обновлений (раз в 30-60 секунд); WebSocket нужен для чатов, игр и совместного редактирования. Есть и середина — SSE, если события идут только от сервера к клиенту.
// Поллинг: опрос каждые 5 секунд
setInterval(async () => {
const res = await fetch('/api/notifications');
const items = await res.json(); // чаще всего []
render(items);
}, 5000);
// WebSocket: сервер сам присылает событие
const ws = new WebSocket('wss://example.com/ws');
ws.onmessage = (e) => {
render(JSON.parse(e.data)); // мгновенно, без опроса
};
ws.send(JSON.stringify({ type: 'markAsRead', id: 3 }));