我正在开始一个小型项目,基本上是经典战舰游戏的多人游戏(与超过两个玩家一样) .
在我深入编码之前,我试图解决的一个问题是多个玩家之间的沟通问题 . 当前的可能性是使用中央HTTP服务器作为通信的中央集线器(与Android C2DM API结合以允许从HTTP服务器到设备的推送通信) . 这似乎是一个很好的解决方案,因为从理论上讲,只要您可以访问Internet,它就应该可以正常工作,无论您是否支持NAT .
然而,所提出的解决方案具有存在单个故障点/额外负载(网络服务器)的缺点 . 所以我想尝试其他选择 . 我想过在客户端之间使用套接字 Build 直接连接(网络服务器只是用作初始会合点),但是这只有在所有设备都在同一网络中时才能正常工作 . 考虑到今天我们几乎总是落后于路由器的NAT,我怎样才能实现直接通信?我一直在阅读有关打孔的内容,但我找不到任何有良好记录的好文库(包含很好的使用示例),并且肯定适用于Android . 大多数(如果不是全部)打孔技术(STUN,ICE等等)广泛可用只能与UDP一起使用,这对于音频/视频以及可能丢失一些消息的实时多人游戏来说很好,但对于多人转向基于游戏,保证每个回合数据的传递非常重要(这是不可能直接用UDP进行的) .
那么任何想法如何在NAT后面的 Android 设备之间实现可靠的打孔(最好通过TCP)?它不必在100%的情况下工作(可能不支持某些陌生人的NAT),但如果它适用于大多数情况则会很好 .