47 lines
1.8 KiB
Markdown
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();
|
|
}
|
|
```
|
|
|
|
# 整理并且标识同步规则 |