MMORPG客户端/服务器通信中如何使用UDP和TCP协议?
例如:
客户端是否通过UDP向服务器广播(播放器位置等)?反之亦然?
或者更像是使用TCP,其中客户端请求服务器移动播放器。服务器接收请求,移动播放器并将播放器发送回客户端,播放器现在位于xyz位置?
必须使用TCP实现聊天频道吗?
有没有关于此的好文章/书籍?我发现了点点滴滴,但似乎真正的肉和土豆都是从经验中获得的。
答案 0 :(得分:8)
许多游戏都使用UDP进行与运动相关的活动 - 因此,当您走路时,可能会发送一堆UDP请求。服务器仍然最终控制它是否有效,但您不必关心每个数据包是否都到达服务器。这就是许多游戏客户也使用某种预测机制的原因。
就你的第二次提及而言,是的,所有控件都由服务器管理是很常见的。您不希望客户端向服务器广播任何内容;你应该做错误和输入处理服务器端,以防止人们黑客入侵。您也可能每秒限制输入。
无论如何,UDP和TCP的组合是合适的 - 你只需要问自己,“我想要可靠性或速度吗?”
答案 1 :(得分:4)
有许多不同的可能实现,但在大多数情况下,它们看起来像这样。几乎在游戏世界中任何动作都会重复这种模式。
答案 2 :(得分:4)
您不能依赖客户传递真实信息。有人会破解协议并作弊。加密数据不会阻止这一点 - 只是让它变得更难做。
客户端应该只发送移动请求等,服务器需要理智检查请求以确保它们不违反游戏规则。服务器应该只发送客户端绝对需要的数据 - 你不能依靠客户端来获取一大块世界数据,只过滤掉玩家目前无法观察到的所有内容。有人会掌握额外的信息并利用它。
如果游戏需要“实时”,那么客户端需要假设服务器将允许移动请求并相应地更新显示 - 如果服务器稍后更正它,则回滚移动。在大多数情况下,客户端和服务器都会同意,一切都会顺利进行。当客户试图欺骗时他们不会同意(这无论如何都是他们的错) - 或者由于连接不良导致客户端严重滞后(你可以做的不多)。
答案 3 :(得分:1)
您可以通过安装wireshark并查看流量来回答问题的一半(使用的传输层协议)。
答案 4 :(得分:1)
您可能对Project Darkstar感兴趣。它是一个开源的MMO框架。
答案 5 :(得分:1)
我认为您可以通过阅读其他人如何实施这些类型的系统来学习很多。这是徒劳的,请允许我指出 Tim Sweeney 和 The Croquet Consortium 的作品
答案 6 :(得分:0)
我不知道除了作为玩家的观察之外的任何细节,但是大多数游戏绝对不会等待服务器回复移动角色,否则会破坏用户体验,除非它是基于回合的。看起来发生的是移动在客户端完成并发送到服务器,然后服务器将这些消息发送给其他玩家。至少在魔兽世界中,如果一个玩家滞后,你可能会看到他们仍然向前移动,然后神奇地出现在另一个位置,这告诉我客户端收到的不仅仅是位置数据,还有他们正在移动的方向以及他们移动的方向然后在没有进一步数据的情况下推断运动。
答案 7 :(得分:0)
你最好的选择可能是看一下Planeshift的网络代码,它是一个开源的MMO。我相信它是现场最发达的(我最后检查过)。
答案 8 :(得分:0)
我认为这个问题没有一个简短的单一答案,它的范围很广。还有几点:
有关于Gamasutra网络的文章,但我现在没有任何方便的链接。不确定他们是否仍然公开,抱歉。