【发布时间】:2015-08-26 21:09:42
【问题描述】:
我正在使用 C# 和 Monogame 开发 MMORPG。现在,我正在为它开发网络协议。我应该注意,我是 CCNA,所以我对这两种协议的工作方式有相当深入的了解。但是,我过去只编写过单人游戏。但是,我有点想弄清楚我应该使用哪种协议。我最初使用 UDP 开始我的实现,并且已经成功地通过我的本地网络发送了单个数据包,但是我担心一旦我开始添加越来越多的客户端,UDP 可能会动摇。考虑到这是一个游戏连接,我最初得出的结论是我需要一个快速、低延迟的连接。但很快意识到我需要发送的一些数据包可能会开始测量许多 KB 的大小,例如当客户端进入地图上的新区域时,或者尝试连接的客户端需要更新其本地纹理缓存时。
我的问题是向那些在制作多人游戏方面有经验的人提出的:即使 TCP 的开销更大,是否值得使用它,或者调整游戏的协议以使其比 UDP 更可靠?
【问题讨论】:
-
真正的答案是你不应该......有很多现有的库/提供者可以处理所有这些东西。到目前为止,您的问题是非常基于意见的......即使是基本的 HTTP 对许多游戏来说也可能足够了(而且支持起来非常简单)。
-
.Net 的套接字实现使用起来非常简单,我宁愿使用自己的代码,也不愿依赖可能包含或不包含我可能无法修复的错误的其他人的代码。我也在使用我自己的代码来尝试最小化带宽需求。虽然 HTTP 可能是一个非常简单的协议,但以我们必须使用的带宽向潜在的数千个客户端发送这么多数据是不可行的。这就是为什么我要使用 Google 的 Protocol Buffers 协议对对象进行序列化。
标签: c# tcp udp monogame multiplayer