通过3G网络建议p2p手机游戏?

时间:2015-01-14 11:41:59

标签: networking mobile udp client-server 3g

我一直在制作类似于“街头霸王”的手机游戏,其中两名玩家通过互联网互相玩耍。

游戏每隔30ms向对方发送一个小数据包(控制器状态)(很多数据包正在进行)。

我目前正在使用服务器连接两个播放器,所有通信都通过TCP通过服务器进行。即使只有30个并发玩家,服务器负载也会增加很多。我知道让通信通过服务器听起来并不明智,所以我认为最好的设计应该让这两个玩家在服务器连接后直接通过UDP进行通信。

但是,在尝试继续使用新设计时,我有一些问题:

由于这是一款手机游戏,玩家可能会大量使用3G网络。 UDP穿孔打孔在3G网络中运行良好吗?当一名球员实际移动时(比如在车内),这是否重要?你认为我应该改变设计或更好的设计概念的推荐吗?

或者,也许一个发送这样的数据包的游戏首先对3G网络来说不是一个好主意?

2 个答案:

答案 0 :(得分:1)

我知道这是一个老问题,但这是一个有趣的问题,所以万一其他人想要评论/讨论......

它实际上是一个非常棘手的问题,我认为答案在很大程度上取决于您的特定应用 - 例如,所有数据到达并且顺序正确等重要。

请看一下关于这个非常有用的Q& A的讨论,了解UDP与TCP的一些背景知识,以及为什么它不是一个简单的问题:

根据您所谈论的数据速率,值得注意的是您处于VoIP类型解决方案的领域,因此值得一看有关VoIP的一些讨论,特别是关注RTP,这是媒体流 - 即实际的语音数据包,而不是SIP(例如)控制消息,它设置和控制呼叫,以及如何直接或通过服务器路由它。这个链接在VoIP / SIP领域有一个很好的讨论:

从您的角度来看,值得记住的是,让流量通过您的服务器可以让您选择分析或修改它,这可能会为现在或将来的新功能提供可能性。

我还要说,如果你所做的只是转发数据包,你可能会发现一个架构可以让你在一个相当普通的服务器上提供比30个并发'调用'更好的架构 - 再次看看来自的体系结构VoIP域在这里可能很有用(代理或转发RTP流量的,而不是处理信令的控制服务器 - 例如SIP消息)。

VoIP工作也有相同的UDP'打孔'问题,并且有相当多的文档,如果你搜索STUN和TURN协议,你会得到一个很好的概述。 Wikipedia链接以下两者:

如果你确实为你的应用程序解决了这个问题,那么在这里看到结果会很有趣 - 也许你可以分享它作为问题的答案吗?

答案 1 :(得分:1)

问题在于,在3G网络中,类似于公共WiFi网络或其他更便宜的ISP,您最终会在防火墙后面映射IP地址。例如,在我的设备上,我的手机的IP地址是100.116.200.55。但这不能说明问题。不幸的是,我没有同一个提供商的第二部电话,看看这两部电话在同一网络上是否可以相互ping通。但是,一旦你在不同的小区,更远的地方可能不再工作了,就像我不能从我的电脑上ping手机一样。

如果您无法直接拨打电话,UDP或TCP是否甚至不是问题。唯一的解决方法是将电话连接到可公开访问的服务器。但这需要服务器。