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

1.8 KiB

拆分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%
//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();
}

整理并且标识同步规则