Различия между веб-сокетами и длительным опросом для пошагового игрового сервера

Я пишу сервер для игры для iOS. Игра пошаговая, и единственное время, когда серверу нужно передать информацию клиенту, это уведомить о движении противника.

Мне любопытно, если кто-нибудь мог бы прокомментировать производительность и простоту реализации различий между использованием веб-сокетов и длительным опросом. Кроме того, если я использовал веб-сокеты, должен ли я использовать его только для получения информации и отправки запросов POST для всего остального или все коммуникации должны осуществляться через веб-сокет?

Кроме того, есть ли что-то еще, чтобы рассмотреть между веб-сокетами и длительным опросом, если я заинтересован в создании веб-клиента?

4 ответа

Решение

Что такое длинный опрос?

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

  • Если на сервере нет информации, доступной для клиента, вместо отправки пустого ответа сервер удерживает запрос и ожидает, пока какая-то информация будет доступна.
  • Как только информация становится доступной (или по истечении подходящего времени ожидания), полный ответ отправляется клиенту. Затем клиент обычно немедленно повторно запрашивает информацию с сервера, так что сервер почти всегда будет иметь доступный ожидающий запрос, который он может использовать для доставки данных в ответ на событие.

    В контексте web/AJAX длинный опрос также известен как программирование Comet.

А как насчет веб-сокетов?

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

  • Клиент устанавливает соединение WebSocket с помощью процесса, известного как рукопожатие WebSocket. Этот процесс начинается с того, что клиент отправляет на сервер обычный HTTP-запрос.
  • Заголовок Upgrade включен в этот запрос, который информирует сервер о том, что клиент желает установить соединение WebSocket.

Вывод:

Если вам нужна связь в реальном времени, вы можете выбрать веб-розетки.

Но в длинном опросе:

Соединение между веб-клиентом и веб-сервером остается открытым, поэтому, когда на сервере появляется новая информация, она может передать ее клиенту. Этот запрос тогда закончен. Затем делается новый запрос между клиентом и сервером, а затем ждите другого обновления с сервера. Одно и то же TCP-соединение обычно открыто постоянно в течение нескольких запросов благодаря HTTP-1.1 keep-alives.

Ссылки и другие соображения:

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

Что такое Long-Polling, Websockets, Server-Sent Events (SSE) и Comet?

длительный опрос в объективе-C

Введение в Websocket

Websocket Vs Long Polling

Использование веб-сокетов в приложениях

Websocket Application

PushTechnology-Long Polling

Для всех, кому может быть интересно, это может зависеть от того, как долго происходят типичные взаимодействия между событиями?

Websocket: все, что превышает несколько десятков секунд, я не думаю, что сохранение открытого веб-сокета особенно эффективно (не говоря уже о том, что IIRC он все равно отключится, если приложение потеряет фокус)

Длительный опрос: это приводит к компромиссу между нагрузкой на сервер (что-нибудь новое сейчас? Как насчет сейчас? ...) и быстротой обнаружения изменений.

Push-уведомления: хотя это может быть технически более сложным для реализации, это действительно было бы лучшим решением IMO, поскольку:

  • уведомление может быть отправлено (и доставлено) практически сразу после наступления события
  • здесь нет standby нагрузка на сервер (либо из открытых веб-сокетов, либо по запросам «как насчет сейчас?»), что особенно важно по мере роста вашей базы пользователей.
  • вы можете переопределить, что происходит, если уведомление приходит, когда пользователь находится в приложении

я должен использовать его только для получения информации и отправки запросов POST для всего остального

Да, вы должны использовать WebSockets только для получения обновлений в реальном времени и API REST для работы с ХЛЕБОМ.

все коммуникации должны быть через WebSocket?

Краткий ответ: нет,

Прочтите эту статью от PieSocket для получения дополнительной информации о лучших вариантах использования WebSockets. Что такое WebSocket: введение и использование

Вы можете ясно понять это, прочитав это

Источник: ABLY.COM

Другие вопросы по тегам