2011-02-08 66 views
9

我看到这个问题之前已经被问过了,但问题的背景通常是模糊的。我期望构建一个Android多人实时游戏,其中有全局状态需要在所有客户端之间共享。因此,我倾向于认为UDP可能不够用。 TCP提供可靠性,但具有固有的开销。但是,由于这是我第一次解决这个问题,我正在寻找其他人的经验反馈。因此,(通常)在Android智能手机上的多人实时游戏的背景下,与TCP相关的开销足够可接受,使得用户体验不会受到如此不利的程度的影响?另外值得一提的是,TCP连接必须是持久连接。另外,如果UDP与一些可靠的定制开发机制相结合,是一种更好的方法吗?任何输入将真正帮助我出&将不胜感激。Android游戏UDP/TCP?

非常感谢

回答

10

最好的答案可能是“试试看”。

我认为TCP开销对于大多数应用程序并不是什么大事。标题大小大约为10个字节,并且每条消息必须来回发送确认消息。

实时游戏真正的杀手将会是延迟。 UDP是不容忽视的。这意味着每条消息只滞后两个节点之间的传输时间。由于TCP需要确认,因此在收到另一方的回复消息之前,并不真正考虑“发送”消息。

通常,它们之间的问题归结为错误检测。如果某个消息以某种方式在互联网中丢失,您希望如何处理它?如果每条消息都非常重要,那么如果你使用UDP,你最终必须在其上实现自己的类TCP协议。您不妨使用TCP并让网络硬件为您提供帮助。但是,如果旧的消息需要多次重试(每次都是网络延迟),随着新更新的进入,这些消息将变成垃圾,那么对于您而言,TCP就是浪费带宽。

+0

感谢您的回复。如果我使用TCP,是否可以创建一个持久的TCP连接? – Joeblackdev 2011-02-08 16:35:49

+0

取决于你的意思是“持久性”。如果你的意思是它在重新启动后仍然存在,那么没有。 (事实上​​,对方可能需要一段时间才能断开连接,在这种情况下,它太**了**)。如果你的意思是说,只要两个应用程序都在运行,它就会持续运行,这就是TCP的工作原理。 UDP当然是无连接的。 – 2011-02-08 16:41:48

+0

只要会话保持连接,TCP就是完全双向的。 – 2011-02-08 17:05:04

7

这不是一个真正的android问题,尽管您选择的协议和其他机制会影响设备(例如电池寿命)。

要选择什么协议主要取决于您的要求(平均数据包大小,平均每秒数据包数,丢失数据包是否是一个问题,您将立即发送多少数据,抖动问题等)。但我可以指出几点。

下面是对Quake3的网络实现了很好的文章:

http://trac.bookofhook.com/bookofhook/trac.cgi/wiki/Quake3Networking

简单而有效的,我真的很喜欢它,只能推荐这一个。

这里也是就这个话题好螺纹:

http://www.gamedev.net/topic/319003-mmorpg-and-the-ol-udp-vs-tcp/

有些游戏使用UDP(尤其是FPS和RTS类型),某些TCP,其中一些他们的某种组合(如UDP协议发送游戏数据,用于聊天的TCP和其他东西)。任何一个都可以工作。您还应该记住,用户可能希望通过2G,3G或WiFi网络工作,甚至WiFi网络可能会出现滞后和容量过剩的情况。我建议实施一个快速原型并在各种网络环境中进行测试。

3

您可以看到我的游戏(仍在开发中) - https://market.android.com/details?id=com.reality.weapons.ak47

它使用TCP/IP。您可以通过拍摄并观察"Battle log"中的通知消息来了解延迟情况。

到目前为止我还算满意。在具有良好的GSM覆盖,往返

“防火>旅游服务器 - >结果的计算>结果旅游 背>显示notfication”市区

通常只需花费不到200女士。

有时可能是2 sec。但在99%的情况下,它小于500 ms