- 【[UFSH2024]虚幻引擎中的DS服务器优化 | 陈杰 铃兰计划UE前端主程序】 https://www.bilibili.com/video/BV1uUy5YkEiN/?share_source=copy_web&vd_source=fe8142e8e12816535feaeabd6f6cdc8e # 拆分DS服务器 **拆分:** 单局游戏会有一个大地图的Server和若干个子地图 的Server。 **通信:** **每个子地图Server都有TCP协议和大地图Server有实时数据的沟通。** 大地图Server是大场景,以PVP为主;子地图是小 场景,有更复杂的AI和物理行为,以PVE为主。 拆分成大致一下结构: - LaunchServer - ServerClient1 - MainMapServer1 - MainMapServer2 - MainMapServer3 - ServerClient1 - MainMapServer1 - MainMapServer2 - MainMapServer3 # 使用Fork部署Server 使用Fork启动Server可以节约性能 - 节约内存占用5% => 1.1% - 启动速度提升200% ```c++ //DS服务器必须以单线程方式启动 添加命令行参数-nothreading强制单线程启动 FGenericPlatformProcess::EWaitAndForkResult tempResult = FUnixPlatformProcess::WaitAndFork(); switch (tempResult) { case FGenericPlatformProcess::EWaitAndForkResuult::Child //*如果使用sigqueue,有效载荷int将被分成上下uint16值。上面的的值是"cookie"和 //*较低的值为"索引"。这两个值将用于使用模式DS--命名进程。这个名字 //*如果提供-WaitAndForkCmdLinePath=/home/guoyuanhua/Server/ForkChildComd,子进程的命令行参数将用内容填充在 //其中子文件的"索引"是要在目录中读取的文件的名称。 //fork启动文件在/home/guoyuanhua/Server/a.out //先启动DS服务器./DissidiaServer Main-nothreading Foo引用的目录中找到的文件的 //取命令行参数 //获取进程id FUnixPlatformProcess::GetCurrentProcessld(); } ``` # 整理并且标识同步规则