ET框架服务器端应用程序的发布
ET框架7.2使用目录结构提供的发布脚本进行发布: Publish-linux-x64.ps1
使用VSCode打开
要确保项目编译成功没有报错
点击此文件右键点击使用PowerShell运行
会在ET目录下生成Publish文件夹
如果发布在Windows系统下把 Publish-linux-x64.ps1 中linux全部改为win
购买阿里云服务器
登录阿里云官网购买云服务器ECS
购买完后使用本地电脑远程连接云服务器
Win远程桌面部署
在本地电脑打开:远程桌面连接
Windows服务器默认远程桌面连接的端口为:3389
如果云服务器拒绝访问则在安全组中开放端口访问权限
输入密码进行连接:
将ET框架下Publish文件夹下发布好的文件进行复制 —— 到远程桌面连接
在远程桌面连接安装dotnet-sdk环境
安装好后双击启动Server.exe
修改Config中的起服配置就可以使外部的玩家访问游戏服务器了
修改配置
在ET框架代码中打开ConstValue静态类
namespace ET
{
public static class ConstValue
{
public const string RouterHttpHost = "127.0.0.1";
public const int RouterHttpPort = 30300;
public const int SessionTimeoutTime = 30 * 1000;
}
}
把RouterHttpHost改为云服务器的公网IP地址,RouterHttpPort改为云服务器开放的端口
修改StartMachineConfig@s.xlsx配置文件
内网地址和外网地址对应云服务器的私网IP和公网IP
重新发布应用程序上传远程桌面部署运行Server.exe
分布式多进程部署
StartProcessConfig@s.xlsx配置文件主要用于配置当前要在哪台机器上要启动几个游戏服务器进程,配置文件中所属机器Id字段代表StartMachineConfig@s.xlsx配置文件
StartSceneConfig@s.xlsx配置文件中记录了在进程中所要创建的一个或多个Scene实体,其中所属区Id来自StartZoneConfig@s.xlsx配置文件中的Id
StartZoneConfig@s.xlsx配置文件用于配置游戏有多少个游戏区服
多进程配置
StartConfig文件下的目录代表ET框架在不同环境中的不同配置
对Release(代表云服务配置)目录下的配置文件进行修改为多进程配置
- 修改StartMachineConfig@s.xlsx配置文件,内网地址和外网地址对应云服务器的私网IP和公网IP
- StartProcessConfig@s.xlsx配置多个进程
- 修改StartSceneConfig@s.xlsx配置文件中的所属进程Id
守护监听进程
作用:用于启动和拉取其他的游戏服务器进程,并且时刻监听其他游戏服务器进程是否处于存活的状态。如果某一个游戏服务器进程挂掉了,守护监听进程就可以监听到游戏进程的崩溃情况,及时给开发者发送邮件报告情况。
启动监听进程
重新进行游戏服务器端的发布,复制win-x64到远程桌面
运行多进程服务器
在bin目录中按住Shift右键,点击在此处打开命令窗口
输入Server.exe --AppType=Watcher --StartConfig="StartConfig/Localhost"
多台云服务器需要修改StartMachineConfig@s.xlsx配置文件
Linux云服务器的部署
先将云服务器的Win系统改为Linux系统
通过Xshell远程连接云服务器Linux系统
发布ET框架的Linux版本
一步一步进入bin目录
查看bin目录下文件
安装.NET环境
在 CentOS Linux 上安装 .NET - .NET | Microsoft Learn
sudo rpm -Uvh https://packages.microsoft.com/config/centos/7/packages-microsoft-prod.rpm
sudo yum install dotnet-sdk-7.0
sudo yum install dotnet-runtime-7.0
安装好后执行 ./Server
验证Server的运行,新建一个连接执行Log日志文件
编译寻路第三方C++库
下载开源项目recastnavigation
复制项目中所有的文件夹(是文件夹)到RecastDll文件夹下,然后将整个Libs文件夹放到Linux系统中
安装C 和 C++编译环境:yum -y install gcc gcc-c++ autoconf make
安装其他第三方库:yum install -y openssl openssl-devel
执行cmake目录下的bootstrap文件
执行make命令
编译第三方寻路库
执行cmake编译源代码的命令 :cmake --build build_linux64 --config Release
编译发生报错 ,修改CMakeLists.txt文件: vim CMakeLists.txt
重新执行编译命令:cmake --build build_linux64 --config Release
编译完成
把新生成的库文件libRecastDll.so 复制到 /root/linux-x64/Bin/
cp libRecastDll.so /root/linux-x64/Bin/
同时把 libRecastDll.so 复制到本地电脑中
执行游戏服务器端的应用程序
运行成功,但是关闭远程连接游戏服务器也随之关闭了
解决KCP报错问题
进入到Libs目录下的KCP文件
输入编译命令: gcc -fPIC -shared ikcp.c -o libkcp.so
将编译好的动态库文件复制到Bin目录下
执行 ./Server 命令解决报错
云服务器安全组开放端口
解决断开连接游戏服务器就关闭问题
执行命令使游戏服务器断开连接在后台运行: nohup ./Server >runtime.log 2>&1 &
日志输出会写入到runtime.log中
执行命令查看游戏服务器端有没有正确执行:ps aux | grep Server
随着时间的推移日志文件会越来越臃肿
ET6.0版本关闭游戏服务端对日志进行一个修改
修改 NLog.config,然后重新上传
删除生成的runtime.log文件:rm -rf runtime.log
在Log中查看日志文件
解决此问题的第二个方法:模拟连接解决,安装一个我也不知道是什么的东西
安装好后在Bin目录下创建模拟连接: screen -S ET (ET是自己起的名字)
Ctrl + A + D退出模拟连接
查看是否被正确执行起来:
screen -ls 查看有哪些模拟连接 screen -r ET 重新回到ET模拟连接,
进入模拟连接后Ctrl +C关闭模拟连接,执行 exit 命令彻底退出模拟连接