安卓P2P多人游戏(使用a)XMPP/Google Talk b)JXTA PeerDroid c)其他方法)

24

我是一名安卓开发者,制作了一些桌游。现在我想将其中一些桌游改成多人游戏。我不想创建和托管自己的网络服务,所以我考虑使用P2P。

我找到的第一个选择是XMPP协议,但它并不是真正的P2P,但如果我可以使用现有的Google Talk服务,那么我准备好了。在不干扰Google Talk客户端正常工作的情况下,是否可以在使用您的现有Google帐户时实现这一点?

然后我听说了JXTA,一种真正的P2P解决方案,并且它已经从J2ME移植到了Android(http://code.google.com/p/peerdroid/)。

也许我有时会把事情复杂化(就像现在这样),

我只想知道简单的桌游P2P的最简单方法。

欢迎提出您所有的意见!预先感谢您


1
我假设玩家数量相对较少,因此一个手机应该能够作为其他手机的服务器,尤其是由于棋盘游戏是回合制的,网络流量很小。但您仍然需要一些集中式的方式来发现其他玩家。(例如,个人而言,在这种情况下,我不会选择P2P)。 - Daniel Dimovski
我不知道你的要求,但如果你希望人们彼此接近,你可以使用类似于Bump的东西来处理数据连接... - Travis
4个回答

4
Kristof,你有没有得到你问题的答案?最近我也在开发一个多人游戏应用程序,虽然最初我选择了托管服务器。但现在我正在重新考虑我的选择,不过我使用的库完全支持点对点通信。底层协议是建立在Google Protobuf之上的。它本质上是一个基于Netty构建的全双工RPC堆栈,可以使用Protobuf。以下是RPC protobuf堆栈的URL:http://code.google.com/p/protobuf-rpc-pro/ 作者非常乐于帮助,我发现了一些错误,但都不是很严重。我在我的Android手机上使用这些库时几乎没有遇到什么问题,但它们并不是非常“紧凑”。不算特别大,只是不太小 : ) 。到目前为止,我已经成功地同步和异步地进行通信,因此,我可能会将我的游戏转移到“点对点”样式,并提供必要的位置/注册服务器,以便找到现有的游戏/服务器。

3
从我们所见,您不能使用现有的Google Talk服务/连接。 您应该采纳Janusz的建议并查看smack库,那是您最好的选择。 要允许使用相同GTalk登录名的多个非干扰连接,请查看XMPP地址的资源组件,它可以使您同时登录到同一个帐户的两个客户端。 您可以有效地将游戏作为另一个客户端。 更多信息请参见:http://code.google.com/appengine/docs/java/xmpp/overview.html#JIDs_and_Resources 最后,在2.2中似乎有一些与设备推送通信相关的新功能,但我还没有深入研究。 2.2也没有广泛部署,因此可能用处有限。

3
使用XMMP对于您的情况应该是可行的。请查看来自igniterealtime的smack,他们有一个不错且活跃的Java API,可以帮助构建您自己的jabber扩展数据包,用于传输游戏状态中的更改。
我认为在同一帐户下同时使用两个谷歌聊天客户端可能会很困难。但这将非常好,因为您可以邀请名单上的所有朋友直接从游戏中与您一起玩。这样,您可以轻松地让更多人参与到您的游戏中来。

1
实际上,Android XMPP库就是Smack。 :-) - Malax
我在developer.android.com上找不到任何xmpp库,你能提供一个链接到预装在Android中的库吗? - Janusz
据我所知,Android中没有XMPP库!并且从Android 1.0开始,Gtalkservice已被移除。 - Kristof
1
有没有人有一个使用现有的 Google Talk 服务创建多人游戏的示例? - Kristof

1
基本上,如果你想编写一个多用户游戏或者在XMPP(Jabber)之上构建游戏,你应该认真看一下XMPP的pubsub扩展。它被设计用于从服务器向客户端推送数据,与HTTP相反。在HTTP中,客户端必须一直从服务器拉取信息,以便知道何时推送了一些新数据。而XMPP被设计为在发生某些事情时向客户端推送数据。服务器和客户端使用的资源更少。
你不应该使用XMPP的聊天部分,因为那会干扰用户的在线状态。
在pubsub中,你可以创建一个节点树,在树中的任何节点或子节点发布新数据时,客户端都可以监听到并订阅该节点或其任何父节点的所有客户端都会收到有关此数据的通知。
XMPP的好处是它是可扩展的,所以你可以使用自己的扩展来扩展协议。它还提供了用户授权、身份验证和加密,你不需要自己调试。

您可以使用任何具有良好的pubsub支持的XMPP服务器,或者您可以自己托管一个服务器。有很多可用于此目的的服务器。据我所知,GTalk上次查看时不支持PubSub。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接