【问题标题】:Should i use UDP or TCP for my minecraft-style game?我应该为我的 minecraft 风格的游戏使用 UDP 还是 TCP?
【发布时间】:2013-06-24 19:18:38
【问题描述】:

我正在创建一个 2d minecraft 风格的游戏,其中地图存储在一个 2 维 int 数组中。 您可以放置​​和破坏块,ai 控制的角色将在地图上四处走动。 游戏使用 xna/c# 制作。 问题是我没有太多编码网络游戏的经验。

我应该使用哪种协议? UDP、TCP?或者也许是lidgren 库? (使用 UDP + 可靠性)

我应该让以下事情在客户端、服务器还是两者上完成?

  1. ai/寻路
  2. 碰撞检测

另外,向服务器发送销毁和放置块消息是一种好习惯吗? 我猜当客户端启动时,它首先需要下载地图。然后对地图的更改将与客户端上的地图和服务器上的地图并行进行....

最后,我应该只在字符发生变化时才广播字符的位置(倾向于 TCP)还是应该持续发送它们(倾向于 UDP)?

任何帮助都是有用的:)

提前致谢。

PS:抱歉我的英语质量不好(我是荷兰人)

【问题讨论】:

  • TCP 较慢,UDP 较快。 TCP也有保证,而UDP则没有。因此,根据您的优先事项,您应该权衡差异。
  • 请记住,除了所讨论的可靠性问题外,UDP 还会带来 NAT 穿越问题。您需要使用 UDP 穿孔等技术。

标签: networking tcp udp multiplayer


【解决方案1】:

我觉得下面的帖子似乎有一些对您有用的好信息。就像 AmitApollo 所说,简而言之,UDP 更快,但不太可靠。如果您通过该网络发送的所有信息都非常重要,那么 TCP 可能是最好的实现方式。您可以随时尝试两者,看看您有什么样的性能/延迟命中。一般来说,我读过的大多数快节奏/实时游戏都使用了 UDP。

Android game UDP / TCP?

【讨论】:

  • 这个话题很有帮助。问题是,我应该不断发送 ai 字符的位置,还是仅在位置发生变化时发送?
  • 那么如果位置没有改变,你为什么需要发送位置?只需让客户端“暂停”碰撞检测,直到您在新位置收到另一个数据包。
  • 你说得很好 :) 但是碰撞检测应该在服务器端还是客户端完成?因为,如果你只在服务器端做,发送位置就足够了。如果我采用这种方法,我还不如在服务器上做ai。这是个好主意吗?
  • 好吧,通过在服务器端进行同步来保持玩家同步并防止黑客入侵会很好。我一直对同一个问题感兴趣。
  • 让客户端成为转储终端很好。由于不需要太多更新,我想我会采用 tcp 方法。如果这变得太慢,我会可靠地尝试lidgren。而且由于客户端是转储终端,我们不需要服务器和客户端之间进行任何协商来查看两者中的哪一个拥有正确的游戏数据。感谢您的帮助顺便说一句:)
【解决方案2】:

一切都应由服务器验证,以使游戏不可破解或修改;通过修改内存地址或其他一些漏洞。

AI/寻路和冲突都应该由服务器验证,但是由于握手和窗口开销,两者都使用 TCP 会导致拥塞。今天的 MMO 使用带有自定义拥塞控制和握手的 UDP 数据包。作为第一个版本,您应该简单地使用 UDP 数据包 - 当数据包在传输过程中丢失或丢失时,游戏将简单地lag 并冻结直到 UDP 数据包通过。您的游戏的后续版本可以使用 UDP 实现自定义确认设置,以便角色在验证之前暂停。

Client --    Movement request UDP    --> Server
Client: Character is frozen              Server: Validate coordinates on map
Client: <-- YES or NO to move request -- Server
Client: Move character based on response

这样可以确保角色的每一个动作都是有效的。您还需要安全密钥或协议安全性,以便不仅仅是任何人都可以发送坐标进行验证。

您可能认为这种设计会落后于您的游戏,但如果设计得当,它将是安全的,并且不会受到客户端黑客的影响。请记住将您的 UDP 数据包设计得尽可能小(在大小方面)。

【讨论】:

  • 这是不正确的:“今天的 MMO 使用 UDP 数据包”——魔兽世界和激战都使用 TCP。
猜你喜欢
  • 2012-06-20
  • 1970-01-01
  • 2019-01-20
  • 1970-01-01
  • 2016-02-06
  • 1970-01-01
  • 2013-06-02
  • 2013-06-01
  • 1970-01-01
相关资源
最近更新 更多