Веб-сокеты (Websockets) - это протокол двунаправленной связи по одному TCP-соединению, позволяющий обмениваться данными между браузером и сервером в реальном времени.
Ключевые отличия от традиционных HTTP-запросов:
- Двунаправленная связь: Сервер может отправлять данные клиенту без предварительного запроса от клиента.
- Одно соединение: Устанавливается одно долгоживущее соединение, устраняя накладные расходы на установку нового соединения для каждого обмена данными (как в HTTP).
- Снижение задержки: Меньше времени тратится на установление соединения, обмен заголовками и обработку коротких запросов/ответов.
Принцип работы:
- Handshake: Браузер отправляет специальный HTTP-запрос на сервер (с заголовками
Upgrade: websocket и Connection: Upgrade).
- Установление соединения: Если сервер поддерживает веб-сокеты, он отвечает с кодом
101 Switching Protocols, после чего соединение переходит в протокол веб-сокетов.
- Передача данных: После установления соединения обе стороны могут свободно обмениваться сообщениями в обе стороны в любое время.
Примеры использования:
- Онлайн-игры
- Чаты и мессенджеры
- Реально-временные обновления данных (котировки, новости)
- Коллаборативные инструменты
Преимущества:
- Низкая задержка
- Эффективное использование ресурсов (меньше overhead)
- Двунаправленная связь в реальном времени
Недостатки:
- Требуется поддержка как на стороне клиента (браузера), так и на стороне сервера.
- Более сложная реализация по сравнению с простыми HTTP-запросами.
Пример клиентского кода на JavaScript:
javascript