Действительно ли WebSockets должен обрабатываться веб-серверами? - PullRequest
14 голосов
/ 21 ноября 2011

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

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

1 Ответ

26 голосов
/ 22 ноября 2011

Протокол 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, то, возможно, вы захотите запустить их вместе (особый случай тесной интеграции).).
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...