用于网络的Java会更好吗? UDP还是TCP?

时间:2011-02-08 16:40:19

标签: java networking tcp udp packets

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

5 个答案:

答案 0 :(得分:3)

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

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

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

否则,您应该使用TCP。

答案 1 :(得分:2)

无论是否为Java都无关紧要,TCP和UDP具有与语言无关的优点和缺点。

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

  1. 假装从未发生过。这是UDP领域。
  2. 等到重新发送数据包。这是应该使用TCP的地方。
  3. 这两种方法本身都不对,这两种方法都会导致游戏出现问题,但这是你应该首先回答的问题。

答案 2 :(得分:1)

看到这个问题:

Android game UDP / TCP?

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

所以UDP非常适合非必要的东西。例如,如果你的游戏中有2个玩家,玩家A每100毫秒接收玩家B的当前坐标和速度,那么玩家A可以推断一段时间而不会走得太远。另一方面,如果玩家A有满屋,而玩家B有皇家同花顺,那么情况就不同了。

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