我刚刚发现我的手机在对称udp防火墙后面,这仅仅意味着udp流量是不可能的。我的3g服务提供商是t-mobile,这是我国最大的运营商之一。我怀疑更多的移动3g提供商有udp限制。
我计划开发一款即时游戏。Udb似乎是快速移动的正确解决方案,但我不能使用udp,因为这样我就失去了灵活性(在任何地方玩,很多地方没有wifi)和一个大的观众(3g提供商阻止udp)。
像umts和3g这样的移动网络有很高的延迟,所以tcp(重新发送丢失的数据包和排队)不是理想的解决方案。
有其他选择吗?还是应该放弃3g实时游戏的想法?
在满足游戏逻辑延迟的情况下通过网络实现实时性是非常困难的(特别是如果你正在制作像第一人称射击游戏这样的游戏,你可以在这里阅读关于克服一些延迟问题的文章:网络物理)。
说到移动网络,就更难了:当然,你可以让你的生活更轻松,只覆盖WIFI连接,但你会失去所有想要在没有免费WIFI连接的情况下玩3G游戏的用户(或者他们只是坚持使用3G连接,因为他们不知道如何切换到WIFI)。如果你选择覆盖3G,欢迎来到运营商的地狱:没有UDP,没有套接字,没有非标准端口,没有长超时,你好,断开连接,你好,奇怪的头和你好,奇怪的代理,现在乘以世界上不同运营商的数量,瞧,你覆盖了他们所有的问题。
我不是想吓唬你,只是在你实现的过程中记住这些事情:
1。没有套接字或使用非标准端口-运营商不允许套接字的原因很明显,他们不希望你占用他们的资源,因为在此期间他们可以为其他付费客户服务。如果你的游戏逻辑允许,试着在没有套接字的情况下实现协议。
2。与海外朋友一起测试你的游戏,或者使用能够帮你完成测试的群体测试服务。您可以通过自己的协议校准延迟。
3。分布服务器将极大地帮助解决延迟问题。
4。确保你没有通过网络发送大量数据,要聪明,对设备的电池要温柔。
5。压缩数据!
全面披露:我在Skiller工作,我们为Android开发者提供多人SDK,包括免费工具,如社交层,用户管理,创收等。我们发现3G多人游戏存在很多问题,于是我们在客户端和服务器端编写算法来弥补这个问题,让开发者的工作更轻松。如果你想尝试一下:www.skiller-games.com
有一些基于云的实时消息服务,旨在自适应地在许多不同的移动平台上工作。在游戏中,你经常想要发布/订阅,所以你可以考虑http://pubnub.com,他们用14个数据中心照顾你的云基础设施,提供低延迟。他们的api是游戏的理想选择,安全性和存在性api就是为此而设计的。他们在测试版中有一个新的对象数据同步API,可以减少编码。
我喜欢他们的一个关键原因是因为他们已经经营了很多年,所以他们的api已经在全球大多数3G和企业网络上进行了测试。
你可能会看到其他包括pusher.com和realtime。co和谷歌的新服务https://cloud.google.com/pubsub/。