Многопользовательская игра для Android P2P (с) XMPP / Google talk б) JXTA peerdroid в) другой способ) - PullRequest
23 голосов
/ 04 марта 2010

Я разработчик Android и создал несколько настольных игр. Теперь я хочу сделать некоторые из моих настольных игр многопользовательскими. Я не хочу создавать и размещать свой собственный веб-сервис, поэтому я подумал о P2P.

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

Потом я услышал о JXTA, реальном P2P-решении, и оно уже портировано с J2ME на Android (http://code.google.com/p/peerdroid/).

Может быть, я здесь слишком усложняю (как иногда)

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

Все ваши мнения приветствуются! Заранее спасибо

Ответы [ 4 ]

4 голосов
/ 22 октября 2010

Кристоф, Вы получили ответ на свой вопрос? Я также недавно работал над многопользовательским приложением, хотя я решил разместить сервер (изначально). Я сейчас пересматриваю свой выбор, однако, но библиотека, которую я использую, полностью поддерживает одноранговую связь. Базовый протокол построен поверх Google Protobuf. По сути это полнодуплексный стек RPC, построенный поверх Netty, который может использовать Protobuf. Вот URL-адрес стека протобуков RPC: http://code.google.com/p/protobuf-rpc-pro/

Автор был очень полезным, и я нашел несколько ошибок, ничего серьезного. У меня также было очень мало проблем, чтобы эти библиотеки работали на моем телефоне Android, но они не очень «компактные». Ничего необычайно большого, просто не маленького :). До сих пор у меня не было проблем с установлением связи, работающей синхронно и асинхронно. Таким образом, я могу перевести свою игру в стиль «одноранговый» и просто предоставить необходимый сервер местоположения / регистрации, который будет использоваться для поиска существующих игр / сервера.

3 голосов
/ 30 июня 2010

Вы не можете использовать существующую службу Google Talk Service / Connection из того, что мы видели. Вам следует воспользоваться советом Януша и проверить библиотеку с привкусом, это ваш лучший выбор. Чтобы разрешить нескольким не мешающим соединениям с одним и тем же логином GTalk взглянуть на компонент ресурса адреса XMPP, это то, что позволяет вам одновременно входить в два клиента под одной учетной записью. Вы можете эффективно сделать свою игру еще одним клиентом. Подробнее здесь: http://code.google.com/appengine/docs/java/xmpp/overview.html#JIDs_and_Resources

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

3 голосов
/ 05 марта 2010

Использование XMMP должно быть возможным для вашего случая.Посмотрите на smack от igniterealtime.У них есть хороший и активный Java API, который помогает создавать собственные пакеты расширения Jabber, которые можно использовать для передачи изменений в игровом состоянии.

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

1 голос
/ 10 июня 2011

В основном, если вы хотите написать многопользовательскую игру или игру, основанную на XMPP (Jabber), вам следует серьезно взглянуть на расширение XMPP для pubsub. Он предназначен для передачи данных с сервера на клиенты, противоположным HTTP. В HTTP клиент должен постоянно получать информацию с сервера, чтобы иметь возможность узнать, когда какие-то новые данные передаются. Хотя XMPP предназначен для передачи данных клиентам, когда что-то происходит. Меньше ресурсов, используемых на сервере и клиентах.

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

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

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

Вы можете использовать любой XMPP-сервер с хорошей поддержкой pubsub или вы можете разместить один сервер самостоятельно. Для этого есть множество серверов. В последний раз, когда я смотрел, GTalk не поддерживал PubSub.

...