在线多人游戏基础知识

Low*_*wip 8 c# networking real-time

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

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

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

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

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

Tur*_*age 1

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

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

对于基于 UDP 的系统,您确实需要自己做更多的簿记工作,但还不足以将其纳入决策中。UDP 游戏更像是共享同一个世界的独立单元。你不需要太多的反应逻辑(在他这样做之后,我这样做),如果有东西被丢弃或忘记,游戏将继续顺利进行。

TCP 会给你更多的控制权。取决于 API,可能需要更多的设置,但值得付出努力。TCP 允许您与网络伙伴一起工作,就像与同一 CPU 上的另一个线程一起工作一样。你所做的一切都会产生开销,但听起来你已经让它发挥作用了,所以不妨坚持下去。

我自己一般倾向于 UDP,因为我认为它是根深蒂固的。此外,每当处理网络时,您都必须针对意外、丢失或延迟的数据包做好计划,而 UDP 有助于传达该消息。如果您违反该规则,您会立即注意到 UDP,但可能不会注意到 TCP。