INTEGRITY Документация

WebSockets

Cloudflare поддерживает проксирование соединений WebSocket без дополнительной настройки.

Контекст

WebSockets - это открытые соединения, которые поддерживаются между клиентом и сервером источника. Внутри соединения WebSockets клиент и источник могут обмениваться данными в обе стороны без необходимости повторно устанавливать сессии. Благодаря этому обмен данными в рамках соединения WebSockets происходит быстро. WebSockets часто используются в приложениях реального времени, например в чатах и играх.

Включить WebSockets

Чтобы включить WebSockets подключения к серверу источника в панели управления:

  1. На панели управления Cloudflare перейдите к разделу Сеть страницу.

    Перейдите в Сеть ↗
  2. Для WebSockets, переключите тумблер в положение Включено.

Чтобы включить WebSockets подключения к серверу источника через API отправьте PATCH запрос с websockets в качестве имени настройки в пути URI, а также value параметр со значением "on".

Примечания о совместимости

Продукт Compatible Примечания
Argo Нет Argo несовместим с WebSocket.
SSL Да
WAF Да* Начальный запрос HTTP 101 подпадает под управляемые правила WAF, пользовательские правила, правила ограничения скорости и другие функции WAF, как и любое другое соединение WebSockets. Однако после установления соединения WAF больше не выполняет никаких проверок.
Workers Да Также можно использовать Durable Objects в качестве конечной точки для сессий WebSocket, что дает полный контроль над сообщениями, отправляемыми клиентам и получаемыми от них.

Доступность

WebSockets поддерживаются на всех тарифных планах Cloudflare.

Измерение запросов и трафика

Из-за особенностей соединений WebSocket вы можете заметить, что по числу запросов и объему трафика они отличаются от обычного HTTP-трафика. Если вы клиент тарифного плана Enterprise, важно учитывать, как Cloudflare измеряет запросы и трафик, чтобы точно оценить свое использование.

Cloudflare измеряет одно соединение WebSocket следующим образом:

После закрытия соединения WebSocket вы можете просмотреть совокупные данные об использовании WebSocket через Traffic Analytics, GraphQL Analytics API, а также Логи HTTP-запросов.

Техническое примечание

Когда Cloudflare развертывает новый код в своей глобальной сети, серверы могут перезапускаться, что приводит к разрыву соединений WebSockets.

Рекомендации

Устранение неполадок

Изучение проблем с WebSocket упрощают такие клиентские инструменты, как wscat ↗. Возможность воспроизвести проблему на одном URL с помощью минимального набора инструментов помогает точнее определить ее причину.

EdgeStartTimestamp и EdgeStopTimestamp поля в Логи HTTP-запросов отражают продолжительность соединения WebSocket (а не исходного HTTP соединения).

Лимиты подключений

Тайм-аут простоя

Cloudflare закрывает соединение WebSocket, если в течение некоторого времени данные не передаются ни в одном направлении. Клиенты тарифного плана Enterprise могут обратиться к своей команде по работе с аккаунтом, чтобы настроить особый тайм-аут простоя. Чтобы поддерживать долгоживущие соединения в периоды бездействия, реализуйте на стороне клиента механизм heartbeat (ping/pong).

Привязка сессий для источников WebSocket с балансировкой нагрузки

Если ваш источник WebSocket находится за Cloudflare Load Balancer, включите Привязка сессии чтобы все запросы от одного клиента направлялись на один и тот же сервер источника. Без привязки сессии повторное подключение WebSocket может попасть на другой источник, у которого нет состояния этой сессии.