0

java中的mmo游戏应该使用什么。UDP还是TCP?为什么?TCP是点对点的关系,每一个数据包都通过,而UDP没有点对点的关系,可以丢弃数据包导致延迟。在这种情况下使用哪个更好?

4

5 回答 5

3

答案不是取决于语言,而是取决于游戏的要求。

如果您的游戏可以处理来自玩家(或服务器)的状态更新,无论是丢失还是乱序到达,那么 UDP 应该没问题。

如果您需要具有最小延迟的实时响应(并且上述问题已解决),那么您还应该使用 UDP。

否则,您应该使用 TCP。

于 2011-02-08T16:48:01.987 回答
2

不管是不是Java,TCP和UDP都有独立于语言的相同优缺点。

但通常它归结为一个基本的设计问题:当一个数据包被丢弃时,应该发生什么?

  1. 假装它从未发生过。这是 UDP 领域。
  2. 等到数据包重新发送。这是应该使用 TCP 的地方。

这两种方法本身都没有对错,两者都会给你的游戏带来问题,但这是你应该首先回答的问题。

于 2011-02-08T16:50:03.177 回答
1

See this question:

Android game UDP / TCP?

于 2011-02-08T16:42:21.717 回答
0

我对 UDP 和 TCP 的体验是这样的:

  • UDP明显更快。我们说的是 2 个数量级。
  • 在有线网络上,UDP丢包率小于1%
  • 在无线网络上,UDP 数据包丢失率很容易达到 80%,而与路由器的物理距离很重要:一英尺外的数据包丢失率为 20%,20 英尺外的数据包丢失率为 50%。

所以 UDP 适用于非必要的东西。例如,如果有 2 个家伙在你的游戏中跑来跑去,玩家 A 每 100 毫秒通过 UDP 接收玩家 B 的当前坐标和速度,玩家 A 可以推断一段时间而不会走得太远。另一方面,如果玩家 A 拿到葫芦,而玩家 B 拿到皇家同花顺,情况就不同了。

在我的项目中,我使用 UDP 作为主要通信方案,每个接收者都发回一个通知。如果通信失败的时间超过 X,我求助于 TCP。

于 2011-02-09T01:07:53.150 回答
0

这个问题与Java并没有真正的联系。UDP数据报不能保证到达目的地,TCP数据报可以。连续的 UDP 数据报也可能无序到达目的地。例如,DNS 基于 UDP,因为请求和响应只需要一个数据报。如果您需要可靠性并且不想实施重试。TCP 是您的选择。如今,计算开销很小,因此我认为支持 UDP 不会带来太多的性能提升。

于 2011-02-08T16:52:29.713 回答