UDP和TCP协议在MMORPG客户端/服务器通信中是如何使用的?
例如:
客户端通过UDP广播(玩家位置等)到服务器吗?还是反过来?
或者更像使用TCP,其中客户端请求服务器移动玩家。 服务器接收请求,移动玩家并将其发送回客户端,告知玩家现在的位置为xyz?
聊天频道必须使用TCP实现吗?
是否有关于此的好文章/书籍?我找到了一些内容,但似乎真正的实战经验才能获得更多的信息。
有许多不同的实现方式,但大部分都是这样的。几乎所有游戏世界中的操作都会重复这个模式。
不能依赖客户端传递真实信息。有人会入侵协议并作弊。加密数据无法阻止这种情况-只能使它变得更难。
客户端应该仅发送有关移动等请求,服务器需要检查这些请求以确保它们不违反游戏规则。服务器应仅返回客户端绝对需要的数据-不能依赖客户端获取一块世界数据并过滤掉玩家当前无法观察到的所有内容。有人将获得额外信息并利用它。
如果游戏需要“实时”,则客户端需要假定服务器将允许移动请求并相应地更新显示-如果服务器稍后更正,则回滚移动。在大多数情况下,客户端和服务器将达成一致,一切都将顺畅进行。当客户端试图作弊(这是他们自己的错)或由于连接不佳而严重滞后时,他们不会达成一致(对此你也没太多办法)。
你提出的问题(使用的传输层协议)一半可以通过安装Wireshark并查看流量来回答。
我认为你可以通过阅读其他人如何实现这些类型的系统来学到很多东西。在这方面,我可以向你介绍 Tim Sweeney 和 The Croquet Consortium 的工作。
Tim Sweeney的论文改变了我对编程的看法。我强烈推荐他们。
我并不知道任何细节,只是作为一个玩家的观察,但大多数游戏肯定不会等待服务器回应才移动角色,除非是回合制。看起来的情况是移动由客户端完成并发送到服务器,然后服务器将这些消息发送给其他玩家。至少在魔兽世界中,如果一个玩家延迟了,你可能会看到他们仍然向前移动,然后在稍后神奇地出现在另一个位置,这说明客户端接收到的不仅是位置数据,还有他们正在移动的方向,并在缺乏进一步数据的情况下推断出移动。
我认为这个问题没有简短的单一答案,它的范围非常广泛。但还是有几点需要注意:
关于Gamasutra中的网络文章已经有过报道,但我现在没有任何链接。不确定它们是否仍然公开可用,抱歉。