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