Действительно ли WebSockets предназначены для обработки веб-серверами?

Стандарт WebSocket еще не был ратифицирован, однако из проекта видно, что технология предназначена для реализации на веб-серверах. pywebsocket реализует сервер WebSocket, который может быть выделен или загружен как плагин Apache.

Так что мне интересно: какое идеальное использование WebSockets? Имеет ли смысл внедрять услугу с использованием выделенных серверов WebSocket или лучше переосмыслить ее для работы поверх Web-сервера с поддержкой WebSocket?

Ответы

Ответ 1

Протокол WebSocket был разработан с учетом трех моделей:

  • Сервер WebSocket работает полностью независимо от любого веб-сервера.
  • Сервер WebSocket, работающий отдельно от веб-сервера, но с прокси-сервером, подключенным к серверу веб-сервера с веб-сервера (позволяющий совместному существованию веб-узла и HTTP-трафика на одном и том же порту).
  • Сервер WebSocket работает как плагин на веб-сервере.

Модель, которую вы выбираете, действительно зависит от приложения, которое вы пытаетесь построить, и некоторых других ограничений, которые могут ограничить ваши варианты.

Например, если ваше приложение будет обслуживаться с одного веб-сервера, а соединение WebSocket всегда будет возвращено на тот же сервер, то, вероятно, имеет смысл просто запустить сервер WebSocket в качестве плагина/модуля в веб-сервера.

С другой стороны, если у вас есть общая служба WebSocket, которая может использоваться на разных веб-сайтах (например, у вас могут быть непрерывные обновления трафика с низкой задержкой, которые подаются с сервера WebSocket), тогда вы, вероятно, захотите запустить WebSocket сервер отдельно от любого веб-сервера.

В основном, чем более тесная интеграция между вашим сервисом WebSocket и вашим веб-сервисом, тем более вероятно, что вы захотите их запустить вместе и на том же порту.

Есть некоторые ограничения, которые могут вызывать одну или другую модель:

  • Если вы управляете сервером (ами), но не входящими правилами брандмауэра, у вас, вероятно, нет другого выбора, кроме как запустить сервер WebSocket на одном и том же порту (-ах) в качестве вашего сервера HTTP/HTTPS (например, 80 и 443). В этом случае вам придется использовать плагин веб-сервера или прокси-сервер для реального сервера WebSocket.
  • С другой стороны, если у вас нет прав суперпользователя на сервере, на котором запущен сервер WebSocket, то вы, вероятно, не сможете использовать порты 80 и 443 (ниже 1024, как правило, является привилегированным диапазоном портов), и в этом случае действительно неважно, запускаете ли вы серверы HTTP/S и WebSocket на том же порту или нет.
  • Если у вас есть проверка подлинности на основе файлов cookie (например, OAuth) на веб-сервере, и вы хотели бы повторно использовать это для соединений WebSocket, тогда вы, вероятно, захотите их объединить (особый случай жесткой интеграции).