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


90

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

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

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


6
Вы также можете использовать Push-уведомления, чтобы уведомить клиента о новых данных. Я считаю, что это более эффективно (с точки зрения батареи), чем рассматриваемые вами два решения.
pteofil

1
как бы это работало, если бы пользователь все еще был в приложении?
кислый

4
Вы также получаете уведомление в приложении, когда получаете push-уведомление.
птеофил 05

Ответы:


177

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

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

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

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

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

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

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

Вывод :

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

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

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

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

PubNub: длинный опрос против сокетов - время автономной работы мобильного телефона

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

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

Введение в WebSocket

Websocket против длительного опроса

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

Приложение Websocket

PushTechnology - длинный опрос

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.