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