Как работать с мультиплеером в JavaScript?

12

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

Сейчас это скорее эксперимент, так что на данный момент единственное, о чем должны знать игроки, - это другие игроки.

Если бы это было типичное веб-приложение, а не игра, то бы HTTP-запросы работали постоянно, но поскольку это игра, производительность и точность будут проблемой.

Поскольку игра ориентирована на несколько телефонных платформ, допустим, что клиент будет написан на JavaScript или в фреймворке на основе JavaScript. Серверная технология полностью открыта.

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

Таким образом, вопрос сводится к тому, что хороший протокол / технология использовать для многопользовательской JavaScript? Любой совет на стороне сервера вещи или это имеет значение? Любая причина, по которой я должен отказаться от этой двухуровневой архитектуры и использовать прямое соединение между телефонами?

обертон
источник

Ответы:

15

Вы хотите лучший протокол связи, чем HTTP. Вы, вероятно, хотите UDP или TCP. Браузеры не могут осуществлять связь по протоколу UDP, поэтому ваш единственный выбор - TCP.

Для TCP вы хотели бы использовать WebSocket , однако поддержка браузера нестабильна для веб-сокетов.

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

Socket.IO - это библиотека (для node.js ), которая поддерживает веб-сокеты и эмулирует их с подходящим запасным вариантом в несовместимых веб-браузерах (использует флэш-память и другие методы COMET).

Для многопользовательских игр на JavaScript я бы рекомендовал использовать socket.io и node.js

Raynos
источник
1
Вот пример игры в реальном времени, созданной с использованием HTML5 и WebSockets: rawkets.com . Исходный код доступен здесь: github.com/robhawkes/rawkets
Elisée
1
Вот два больше примеров
Raynos
4

И вопрос, и принятый ответ были опубликованы в 2011 году, и с тех пор времена совсем изменились :)

Websockets довольно распространен, но еще лучше технология WebRTC, которая допускает ненадежные потоки UDP. Это намного лучше для игр.

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

<shameless self promotion>

Я один из первых разработчиков lance.gg , многопользовательского игрового сервера / библиотеки, основанного на node.js, где мы решили многие из упомянутых проблем (и многих других!). Наша цель - упростить разработку многопользовательских игр для разработчиков JavasScript. Я горячо приглашаю вас использовать его в качестве отправной точки для создания вашей игры.

</shameless self promotion>

OpherV
источник