在线多人游戏基础知识

时间:2011-05-25 17:03:50

标签: c# networking real-time

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

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

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

我应该将TCP用于重要事件还是使用UDP?如果我需要使用UDP,我怎样才能确保数据不会丢失?

通过同时使用TCP和UDP,我需要为每个播放器保存其列表中的IP(对于UDP)和在另一个列表中连接的TcpClient(对于UDP)。我怎么能改变它才能更有效?

1 个答案:

答案 0 :(得分:1)

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

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

使用基于UDP的系统,您需要自己做更多的簿记,但不足以让它考虑到决策。 UDP游戏更像是独立的单元,它们都碰巧共享同一个世界。你不需要很多反应逻辑(在他这样做之后,我这样做),如果某些东西被丢弃或被遗忘,游戏将继续顺利进行。

TCP将为您提供更多控制权。取决于API,可能涉及更多的设置,但它值得努力。 TCP允许您与联网伙伴一起工作,就像您在同一CPU上使用另一个线程一样。你做的每件事都有一个开销,但听起来你已经有了它的工作,所以不妨坚持下去。

我自己倾向于使用UDP,因为我认为它根深蒂固。此外,每当处理网络时,您必须计划不期望的,丢失的或延迟的数据包,并且UDP有助于将该消息驱动回家。如果你破坏了这个规则,你会立即注意到UDP,可能不会使用TCP。

相关问题