Tcp MMORPG客户端/服务器编码

Tcp MMORPG客户端/服务器编码,tcp,udp,client,Tcp,Udp,Client,如何在MMORPG客户机/服务器通信中使用UDP和TCP协议 例如: 客户端是否通过UDP向服务器广播(播放机位置等)?反之亦然 或者更像是使用TCP,客户端请求服务器移动播放器。服务器接收请求,移动播放机,并将播放机现在位于xyz位置的消息发送回客户端 聊天频道必须使用TCP实现 这方面有什么好文章/书吗?我已经找到了一些零碎的东西,但似乎真正的肉和土豆是从经验中赢得的。你的问题(使用的传输层协议)有一半可以通过安装wireshark并查看流量来回答。作为一名玩家,除了观察之外,我不知道任何细

如何在MMORPG客户机/服务器通信中使用UDP和TCP协议

例如:

客户端是否通过UDP向服务器广播(播放机位置等)?反之亦然

或者更像是使用TCP,客户端请求服务器移动播放器。服务器接收请求,移动播放机,并将播放机现在位于xyz位置的消息发送回客户端

聊天频道必须使用TCP实现


这方面有什么好文章/书吗?我已经找到了一些零碎的东西,但似乎真正的肉和土豆是从经验中赢得的。

你的问题(使用的传输层协议)有一半可以通过安装wireshark并查看流量来回答。

作为一名玩家,除了观察之外,我不知道任何细节,但大多数游戏肯定不会等待服务器回复来移动角色,除非是基于回合的,否则会破坏用户体验。看起来,移动是在客户端完成的,并发送到服务器,然后服务器将这些消息发送给其他玩家。至少在魔兽世界中,如果一个玩家落后了,你可能会看到他们继续前进,然后神奇地出现在另一个位置,这对我来说,客户端接收到的不仅仅是位置数据,还有他们正在移动以及他们移动的方向,然后在没有进一步数据的情况下推断移动

你最好看一看Planeshift的网络代码,这是一个开源MMO。我相信这是现场开发得最多的(上次我检查过)。

很多游戏都使用UDP进行与运动相关的活动——因此,当你走路时,很可能会发送大量UDP请求。服务器仍然最终控制这是否有效,但您不必关心是否每个数据包都到达服务器。这就是为什么很多游戏客户端也使用某种预测机制的原因

关于第二点,是的,所有控件都由服务器管理是很常见的。您不希望客户端向服务器广播任何内容;您应该在服务器端执行错误和输入处理,以防止人们进行黑客攻击。您还可以限制每秒的输入


无论如何,UDP和TCP的结合是合适的——你只需要问问自己,“我想要可靠性还是速度?”

有许多不同的可能实现,但在大多数情况下,它们看起来是这样的。在游戏世界中,几乎任何动作都会重复这种模式

  • 客户机与服务器进行通信,告知玩家想要移动
  • 客户端显示玩家根据其认为应该发生的事情移动
  • 服务器根据玩家的位置验证移动是否可能发生
  • 服务器将更新客户端,使其知道服务器所关注的播放机的位置
  • 客户端更新玩家位置以反映服务器的世界状态

  • 你可能对我感兴趣。这是一个开源的MMO框架。

    你不能依靠客户端传递真实的信息。有人会破坏协议并作弊。加密数据并不能阻止这一点,只是让它变得更难

    客户端应该只发送移动请求等,服务器需要检查请求是否正常,以确保它们没有违反游戏规则。服务器应该只发送回客户端绝对需要的数据——你不能依赖客户端获取大量世界数据,而只是过滤掉玩家当前无法观察到的所有数据。有人会获得额外的信息并加以利用


    如果游戏需要“实时”,那么客户端需要假设服务器将允许移动请求,并相应地更新显示-如果服务器稍后纠正,则回滚移动。在大多数情况下,客户机和服务器会达成一致,一切都会顺利进行。当客户试图作弊时,他们不会同意(不管怎样,这是他们的错),或者客户由于连接不良而严重滞后(对此你无能为力)。

    我认为这个问题没有一个简单的答案,它的范围相当广。不过,有几点:

    • 没有必要仅仅因为使用UDP就“广播”。根据我的经验,UDP在大多数情况下是点对点的
    • 完全可以通过UDP进行您自己的“安全”通信,您不必使用TCP。这不是魔法,只是。。。聪明而复杂。:)但在大多数情况下,正如您所暗示的,TCP不适合在游戏中进行实时通信
    • 有一些方法可以使TCP更合适,例如搜索“Nagle算法”
    • 如果您已经在UDP上推出了自己的无损传输协议,则可以通过UDP进行聊天。很多游戏都是为了这个

    有关于Gamasutra网络的文章,但我现在手头没有任何链接。我不确定它们是否仍然可以公开使用,抱歉。

    我想你可以从阅读其他人如何实现这些类型的系统中学到很多。我想让你看看蒂姆·斯威尼和槌球联盟的工作,这是徒劳的

  • 蒂姆·斯威尼的论文改变了我对编程的思考方式。我推荐的太多了。

    我想现在是时候了。只是为了让它保持最新。