在线多人游戏基础知识

8

我目前正在开发一个实时在线多人游戏,使用的是C#语言。我的目标是通过UDP协议实现客户端/服务器的连接。到目前为止,我已经使用UDP控制玩家的移动和TCP控制事件(如玩家射击、玩家失去生命值),因为我需要确保这些数据能够到达所有连接到服务器的玩家。我知道UDP被称为“不可靠”,有一些数据包可能会丢失。但我在各处都看到过不要混合使用TCP和UDP,因为这会影响连接。

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

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

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

使用TCP和UDP两种协议,我需要分别在列表中保存每个玩家的IP(用于UDP)和已连接的TcpClient(用于TCP)。我该如何改进以提高效率?


8
这个问题可能更适合我们的游戏开发堆栈交换网站:http://gamedev.stackexchange.com/。 - rlb.usa
1
投票关闭,但迁移到游戏开发。 - user7116
在线多人游戏基础 - Lowip
1个回答

1

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

我建议选择其中一个协议并使用它。但主要是因为这将简化您的网络层,并使调试网络问题更加容易。当我必须在TCP和UDP之间选择时,我更注重我的网络逻辑如何工作。

使用基于UDP的系统确实需要做更多的簿记工作,但不足以影响决策。UDP游戏的流程更像是所有单独的小单元都共享同一个世界。您不希望有太多的反应逻辑(他做了这个后,我就做那个),如果出现掉包或遗漏,游戏仍将保持平稳。

TCP将给您更多的控制权。根据API的不同,可能需要进行一些额外的设置,但这是值得投入的。TCP让您可以像处理同一CPU上的另一个线程一样处理与网络合作的伙伴。每次操作都会增加一些开销,但听起来您已经开始运作了,所以最好坚持下去。

我个人倾向于使用UDP,因为我认为它已经深入人心了。此外,在处理网络时,您必须计划好未预期的情况,例如丢失或延迟的数据包,而UDP有助于强化这一点。如果您违反了这个规则,使用UDP会立即注意到,但使用TCP可能不会。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接