《网络多人游戏架构与编程》之游戏引擎、云托管
/////////////////// UE4 ///////////////////////
接口类:ISocketSubsytem
UNetDriver类:负责接收、过滤、处理和发送数据包。
bReplicateMovement:根据复制的速度信息,复制并预测模拟代理的移动。
3种类型的RPC:
-
服务器函数:在客户端上调用并在服务器上执行的函数。只能拥有者调用自己。
-
客户端函数:服务器上调用,在客户端执行的函数。例如玩家X死了,客户端X显示死亡画面。
-
多播函数:服务器上调用,在多个客户端执行。例如副本BOSS死了,副本内的客户端都显示BOSS死亡效果。
/////////////////// 云托管 ///////////////////////
比赛安排系统寻求空闲服务器,返回IP地址和端口。客户端根据IP和端口连接那台服务器。云服务器主要负责在必须要启动和关闭游戏实例。
游戏服务器实例:指模拟游戏世界给客户端复制信息的实体。
游戏服务器进程:更新游戏服务器实例,管理游戏实例的客户端,与操作系统交互。
一个游戏服务器进程管理多个游戏服务器实例:更新每个实例、给每个实例绑定唯一的端口、不共享实例之间的可变数据。但是一个实例崩溃会导致整个进程崩溃。
一台服务器可以运行多个虚拟机,一个虚拟机可以运行多个进程。
为了避免内存泄漏,最好在比赛结束时尽可能关闭和重启服务器进程。
本地服务器进程管理器 LSPM:本身是一个进程,负责监听远程命令,根据要求生成服务器进程,并监控给定的机器当前正在运行的进程。
安全性考虑,可以增加一个白名单,或者增加一个请求头安全验证。
监听进程时,在设定时间内,LSPM没有收到某个进程的心跳包,LSPM会认为该进程已经停止,那么LSPM将结束这个进程。
虚拟机管理器VMM:管理所有的LSPM,要求LSPM在必要时生成游戏进程,启动和关闭虚拟机及LSPM。
每个虚拟机有1个LSPM,负责在该虚拟机上生成和监听进程,以及向VMM报告自身情况。
当比赛安排服务决定要启用新的游戏服务器时,它向VMM端点发送请求,然后该端点的处理程序寻找尚有空余的虚拟机,或请求云提供新的虚拟机。识别了虚拟机之后,它请求虚拟机的LSPM启动新的游戏服务器进程。