在线多人游戏基础知识

本文关键字:基础知识 游戏 在线 | 更新日期: 2023-09-27 17:57:36

我目前正在开发一款实时的c#在线多人游戏。目的是使用UDP协议实现基于客户端/服务器的连接。到目前为止,我已经使用UDP来处理玩家的动作,使用TCP来处理事件(玩家射击、玩家失去生命),因为我需要确保这些数据会到达所有连接到服务器的玩家。我知道UDP被称为"不可靠",有些数据包可能会丢失。但我读过很多关于永远不要混合TCP和UDP的文章,因为它会影响连接。

主要问题是我应该如何组织我的人际网络?

UDP是无连接的,我应该如何保存谁是谁?我应该在列表中保存客户端的ip地址吗?

对于重要事件,我应该使用TCP还是使用UDP?如果我需要使用UDP,我如何确保数据不会丢失?

通过同时使用TCP和UDP,我需要为每个玩家将他们的IP保存在一个列表中(对于UDP),并将连接在另一个列表的TcpClient保存在另一列表中(用于UDP)。我该如何改变这一点以提高效率?

在线多人游戏基础知识

自早期游戏开发以来,连接已经有了很大的改进。在过去,UDP的速度优势使其成为一种非常理想的协议,甚至平衡了可靠性问题。然而,随着网络的改进,回避TCP的理由也消失了。

我建议选择两种协议中的一种并使用它。但主要是因为它会简化您的网络层,使调试网络问题变得更容易。当我必须在TCP和UDP之间进行选择时,我会更多地决定我希望网络逻辑如何流动。

使用基于UDP的系统,您确实需要自己做更多的记账,但实际上还不足以将其纳入决策。UDP游戏更像是共享同一个世界的独立细胞。你不需要太多的被动逻辑(在他这样做之后,我也那样做),如果有什么东西被丢弃或遗忘了,游戏就会继续顺利进行。

TCP会给你更多的控制权。取决于API,可能需要更多的设置,但这是值得的。TCP允许您与网络合作伙伴一起工作,就像您在同一CPU上与另一个线程一起工作一样。你做的每件事都有开销,但听起来你已经有了它,所以不妨坚持下去。

我自己通常倾向于UDP,因为我认为它根深蒂固。此外,无论何时处理网络问题,您都必须为未预期的、丢失或延迟的数据包做好计划,UDP有助于将该消息带回家。如果你违反了这个规则,你会立即注意到UDP,而不是TCP。