我正在开始一个小项目,基本上是经典战舰游戏的多人游戏版本(与两个以上的玩家一样)。

在学习编码之前,我要解决的一个问题是多个播放器之间的通信问题。当前的可能性是使用中央HTTP服务器作为通信的中央集线器(与Android C2DM API结合使用,以允许从HTTP服务器到设备的推送通信)。这似乎是一个不错的解决方案,因为从理论上讲,只要您可以访问Internet,无论您是否支持NAT,它都应该可以正常工作。

但是,提出的解决方案的缺点是存在一个单点故障/额外负载(Web服务器)。所以我想尝试其他选择。我曾考虑过使用客户端之间的套接字进行直接连接(只是将Web服务器用作初始集合点),但是,只有在所有设备都在同一网络中时,这种方法才能很好地工作。考虑到今天我们几乎总是落后于路由器的NAT,如何实现直接通信?我一直在阅读有关打孔的文章,但是我找不到任何有据可查的好的库(包含很好的使用示例),并且肯定可以在Android上运行。同样,大多数(如果不是全部)广泛使用的打孔技术(STUN,ICE等)仅适用于UDP,这对于音频/视频和可能丢失某些消息的实时多人游戏非常有用,但对于多人转基于游戏的游戏,重要的是要保证每回合数据的传递(这是UDP无法直接实现的)。

那么,如何在NAT之后的 Android 设备之间实现可靠的打孔(最好是通过TCP)呢?它不必在100%的情况下都可以工作(可能不支持某些陌生的NAT),但是如果它在大多数情况下都可以,那就很好了。

最佳答案

通过smtalk在gtalk上使用xmpp。您不必担心服务器和单点故障。让谷歌担心!我写了俄罗斯方块,让它使用gtalk作为通讯层与两个玩家对战。 http://code.google.com/p/tetrads-drop-lite/如果您想要更多的玩家,可以尝试MUC。

07-24 09:37
查看更多