Подтвердить что ты не робот

Являются ли WebSockets подходящими для многопользовательских игр в режиме реального времени?

Мне интересно создать небольшую многопользовательскую игру в режиме реального времени, используя HTML5/JavaScript для клиента и, возможно, Java для серверного программного обеспечения.

Я немного заглянул в WebSockets, но, похоже, у меня были неправильные представления о том, что такое WebSockets. Первоначально я думал о WebSockets как о простом обращении к сокетам TCP, как о том, как они используются на Java и других языках, но, похоже, существует целый процесс установления связи, и каждая передача включает в себя много накладных расходов HTTP (и в в этом случае преимущества над Ajax не кажутся такими захватывающими, как на первый взгляд)?

В связи с тем, есть ли какие-либо альтернативы WebSockets для этой цели (многопользовательские игры в режиме реального времени в JavaScript)?

4b9b3361

Ответ 1

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

Я бы рекомендовал вам посмотреть следующее: https://www.youtube.com/watch?v=_t28OPQlZK4&feature=youtu.be

Посмотрите:

Единственным необработанным TCP-решением будет использование плагина, который поддерживает какой-то объект TCPClient. Я бы порекомендовал вам попробовать WebSockets.

Здесь вы можете найти несколько опций . Просто найдите WebSockets на странице.

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

Ответ 2

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

Опрос HTTP, такой как BOSH или Bayeux сложны, но вводят сетевые издержки и задержки. Websocket был разработан, чтобы преодолеть их ограничения и определенно более отзывчив.

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

Я закодировал многопользовательскую аркадную игру с socket.io и обычную мера за 2 мс с помощью websocket и около 30 мс с xhr-опросом на LAN. Этого достаточно для многопользовательских игр.

Я предлагаю вам взглянуть на nodejs и socket.io, чтобы иметь возможность совместно использовать код между клиентом и сервер, вы также заимствуете многопользовательский код на [3].

Ответ 3

Я не уверен, что WebSockets по-прежнему являются лучшим инструментом для создания сетей многопользовательский режим в режиме реального времени в эти дни (2017). WebRTC - это новая технология что дает возможность значительно повысить производительность. И эти дней, WebRTC также легче работать с помощью следующих библиотек:

  • node-webrtc упрощает работу на стороне сервера
  • webrtc-native, который также предоставляет серверную библиотеку и может быть быстрее, поскольку его название предполагает
  • electron-webrtc обеспечивает реализацию, которая является хорошим совпадением, если вы хотите упаковать свою игру, используя electron

В качестве альтернативы, если вы хотите избавиться от фактических данных о сетевой реализации, и вы ищете библиотеку, которая обеспечивает интерфейс многоуровневого уровня более высокого уровня, посмотрите Lance.gg. (отказ от ответственности: я являюсь одним из участников).

Ответ 4

Если вы планируете использовать JavaScript для своей игры (как и вы), то WebSocket - лучший выбор для вас. И если вы хотите поддерживать более старую версию Internet Explorer, тогда подумайте о системе Signal R, разработанной Microsoft. Они используют WebSocket под капотом, но у них также есть несколько вариантов отбрасывания... поэтому протокол будет использовать лучшее доступное доступное решение.

http://signalr.net/

Ответ 5

В принципе, у вас есть 3 варианта на момент написания этой статьи:

WebSockets

WebSockets - это легкий протокол обмена сообщениями, который использует TCP, а не реализацию Javascript сокетов TCP, как вы уже отметили. Однако, помимо первоначального рукопожатия, HTTP-заголовки не передаются туда и сюда за пределами этой точки. Как только соединение установлено, данные проходят свободно, с минимальными накладными расходами.

Long-опрос

Длительный опрос, в двух словах, предполагает, что клиент периодически запрашивает сервер для получения новой информации с HTTP-запросами. Это чрезвычайно дорого с точки зрения процессора и пропускной способности, поскольку вы каждый раз отправляете здоровенный новый HTTP-заголовок. Это, по сути, ваш единственный вариант, когда речь идет о старых браузерах, а библиотеки, такие как Socket.io, используют длительный опрос как резерв в этих случаях.

WebRTC

В дополнение к тому, что уже упоминалось, WebRTC позволяет осуществлять связь через UDP. UDP уже давно используется в многопользовательских играх в не-веб-средах из-за его низких накладных расходов (относительно TCP), низкой латентности и неблокирующего характера.

TCP "гарантирует", что каждый пакет поступит (за исключением катастрофического сбоя сети) и что они всегда будут поступать в том порядке, в котором они были отправлены. Это отлично подходит для критической информации, такой как регистрация баллов, хитов, чата и т.д.

UDP, с другой стороны, не имеет таких гарантий. Пакеты могут поступать в любом порядке, или вообще нет. Это действительно полезно, когда речь идет о менее критичных данных, которые отправляются с высокой частотой, и должны прибывать как можно быстрее, например, в позиции игрока или входы. Причина в том, что потоки TCP блокируются, если один пакет задерживается во время транспортировки, что приводит к большим разрывам в обновлениях состояния игры. С UDP вы можете просто игнорировать пакеты, которые прибывают поздно (или вообще не работают), и продолжать с помощью следующего следующего, создавая более плавный опыт для игрока.

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