非传统 CS 架构。

客户端与服务器

传统的在线游戏通常使用客户端服务器架构。

也就是客户端负责发送自身相关的信息,服务器负责业务逻辑运算,校验客户端的数据以及行为是否合法。同时发送将客户端的信息发送给其他客户端。

主与仆

在单机游戏多人联网时,通常会涉及到谁建立主机的情况。

这种情况下建立主机的人就是传统的服务器。

只要按照传统的客户端服务器架构运行就可以了。这也就是为什么通常主机玩家退出全部玩家都被迫终止游戏的原因。

但是最近有看到一些奇怪的架构。主机被命名为 Master,客户端被命名为 Servant。其实名字什么的不重要(又不是 SM)。

这个架构最奇特的特点是主机不会(不能)主动发送信息给其他客户端。

不得不说这是一种很奇怪的设定。

主机不发送给客户端那不是没有办法正常运转了吗?

还好客户端可以请求和发送数据。

这样就可以建立函子 flip 实现映射:服务器发送数据转化为客户端请求数据。

每个客户端只负责修改自身状态,然后发送自身状态,接收到其他客户端的状态后更新本机中其他客户端的状态(位置,得分等)。

禁止直接修改其他客户端的状态。

在这种架构下服务器就是功能残缺的客户端,不太清楚这种架构服务器的优势在哪,或许是可以反作弊?

后续补充

经过一周的研究发现,服务器是可以给客户端发消息的,或者准确地说是可以修改客户端的一些数据,而客户端不能修改其他客户端的数据。这样以来就是比较正常的服务器架构了。目前还没使用服务器修改客户端数据这个功能。