• 中文
    • English
  • 注册
  • 技术教程
  • 今日 0
  • 帖子 87
  • 关注 3
  • 赞助商广告
    • 总打赏排行
    • 今日收益排行
  • 似水流年
    似水流年
    他太懒了,什么都没有写
  • 三七
    三七
    但凡你不会的,都可以找我,我会吹牛逼!
  • quweisu
    quweisu
    他太懒了,什么都没有写
  • Starbeat
    Starbeat
    他太懒了,什么都没有写
  • 似水流年
    似水流年
    他太懒了,什么都没有写
  • ₅²⁰火系统¹ᶟ₁₄
    ₅²⁰火系统¹ᶟ₁₄
    他太懒了,什么都没有写
  • 巅峰,无名
    巅峰,无名
    他太懒了,什么都没有写
  • (♛‿♛)
    (♛‿♛)
    他太懒了,什么都没有写
  • 沐秋
    沐秋
    他太懒了,什么都没有写
  • 花无影
    花无影
    他太懒了,什么都没有写
  • 三七
    三七
    但凡你不会的,都可以找我,我会吹牛逼!
  • 退
    退
    他太懒了,什么都没有写
  • 技术教程 技术教程 关注:3 内容:87

    阿拉德监听服务端掉线自动重启教程

  • 查看作者
  • 打赏作者
  • 拉黑名单
    • 技术教程
    • 少侠
      永恒之主

      一、自动重启原理:

      监听服务端进程的端口,当端口没有被占用时,则自动执行Linux启用命令。一般比较容易掉线是GlobalActivityServerGateServer这两个进程!

      二、查看进程端口:

      不同的游戏版本,使用的端口都不一样,因此我们首先得弄清楚需要监听的是哪个端口。

      1、GlobalActivityServer进程的端口如下:

      阿拉德监听服务端掉线自动重启教程

      2、GateServer进程的端口如下:

      阿拉德监听服务端掉线自动重启教程

      三、PM2管理器添加监听:

      1、在/www/wwwroot/gmald/src目录创建一个GameStatusProtect.js文件,代码如下:

      var net = require('net')
      var process = require('child_process');
      var restartFlag = false;
      /**
       * 功能:检测游戏端口是否被占用
       * 作者:三七博客(37boke.com)
       */
      function checkGamePort (port,num) {
       var server = net.createServer().listen(port)
       server.on('listening', function () {
      	server.close() // 关闭服务
      	if(!restartFlag){
      		restartFlag = true;
      		if(num==0){
      			var cmd = 'cd /root/platform;./run.sh'; // 重启总服务端
      		}else{
      			var cmd = 'cd /root/s1;./run.sh'; // 重启1区
      		}
      		process.exec(cmd, function(error, stdout, stderr) {
      		    console.log("三七博客(37boke.com)提醒您,正在执行命令:"+cmd);
      		    console.log("三七博客(37boke.com)提醒您,执行命令失败,Error:"+error);
      		    //console.log("stdout:"+stdout);
      		    //console.log("stderr:"+stderr);
      		});
      		setTimeout(()=>{
      			restartFlag = false;
      		})
      	}
       })
       server.on('error', function (err) {
      	 if (err.code === 'EADDRINUSE') { // 端口已经被使用
      		console.log('三七博客(37boke.com)提醒您,端口[' + port + '] 运行正常!')
      	 }
       })
      }
      // 定时每秒执行一次
      setInterval(()=>{
      	checkGamePort(30701,0);/* 这里的30701是GlobalActivityServer进程的端口 */
      	checkGamePort(21003,1);/* 这里的21003,1是GateServer进程的端口 */
      },1000)

      这个文件代码里,您只需要修改倒数第2和第3行要监听的端口号即可。

      2、将GameStatusProtect.js文件的权限设置为777权限 所有者root,如下图:

      阿拉德监听服务端掉线自动重启教程

      3、宝塔面板 → 软件商店 → PM2管理器 → 添加如下图的项目:

      阿拉德监听服务端掉线自动重启教程

      启动文件选择我们刚才创建的/www/wwwroot/gmald/src/GameStatusProtect.js文件。

      四、如何预防服务端掉线?

      1、如果是因为服务器内存不够的话,可以增加虚拟内存,方法如下:

      宝塔面板 → 软件商店 → 安装Linux工具箱,添加Swap虚拟内存即可

      阿拉德监听服务端掉线自动重启教程

      2、PM2管理器的app.js项目使用集群模式,方法如下:

      宝塔面板 → 软件商店 → PM2管理器,添加或者编辑src项目,把负载实例数量设置为3以上

      阿拉德监听服务端掉线自动重启教程

      新秀

      6666666666支持

      回复

      请登录之后再进行评论

      登录
    • 返回顶部
    • 做任务
    • 实时动态
    • 偏好设置
    • 到底部
    • 帖子间隔 侧栏位置: