BlueRoseNote/02-Note/演讲与教程笔记/虚幻开放日2024/虚幻引擎中的DS服务器优化.md

47 lines
1.8 KiB
Markdown

- 【[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-<cookie>-<index>命名进程。这个名字
//*如果提供-WaitAndForkCmdLinePath=/home/guoyuanhua/Server/ForkChildComd,子进程的命令行参数将用内容填充在
//其中子文件的"索引"是要在目录中读取的文件的名称。
//fork启动文件在/home/guoyuanhua/Server/a.out
//先启动DS服务器./DissidiaServer Main-nothreading Foo引用的目录中找到的文件的
//取命令行参数
//获取进程id FUnixPlatformProcess::GetCurrentProcessld();
}
```
# 整理并且标识同步规则