代码札记 —— 奇怪的 SM 架构
May 27, 2018
非传统 CS 架构。
客户端与服务器
传统的在线游戏通常使用客户端服务器架构。
也就是客户端负责发送自身相关的信息,服务器负责业务逻辑运算,校验客户端的数据以及行为是否合法。同时发送将客户端的信息发送给其他客户端。
主与仆
在单机游戏多人联网时,通常会涉及到谁建立主机的情况。
这种情况下建立主机的人就是传统的服务器。
只要按照传统的客户端服务器架构运行就可以了。这也就是为什么通常主机玩家退出全部玩家都被迫终止游戏的原因。
但是最近有看到一些奇怪的架构。主机被命名为 Master,客户端被命名为 Servant。其实名字什么的不重要(又不是 SM)。
这个架构最奇特的特点是主机不会(不能)主动发送信息给其他客户端。
不得不说这是一种很奇怪的设定。
主机不发送给客户端那不是没有办法正常运转了吗?
还好客户端可以请求和发送数据。
这样就可以建立函子 flip
实现映射:服务器发送数据转化为客户端请求数据。
每个客户端只负责修改自身状态,然后发送自身状态,接收到其他客户端的状态后更新本机中其他客户端的状态(位置,得分等)。
禁止直接修改其他客户端的状态。
在这种架构下服务器就是功能残缺的客户端,不太清楚这种架构服务器的优势在哪,或许是可以反作弊?
后续补充
经过一周的研究发现,服务器是可以给客户端发消息的,或者准确地说是可以修改客户端的一些数据,而客户端不能修改其他客户端的数据。这样以来就是比较正常的服务器架构了。目前还没使用服务器修改客户端数据这个功能。