pomelo源码解析--启动项目(pomelo start)

Posted 夜色魅影

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pomelo源码解析--启动项目(pomelo start)相关的知识,希望对你有一定的参考价值。

我们知道启动pomelo服务器是命令pomelo start,那执行pomelo start到底都做了些什么?服务器之间是怎么连接的?客户端是怎么给服务器发消息的?下面我们通过源码一步步来展开。

1. 启动命令,最后实际执行app.js

// pomelo
program.command('start')
  .description('start the application')
  .option('-e, --env <env>', 'the used environment', DEFAULT_ENV)
  .option('-D, --daemon', 'enable the daemon start')
  .option('-d, --directory, <directory>', 'the code directory', DEFAULT_GAME_SERVER_DIR)
  .option('-t, --type <server-type>,', 'start server type')
  .option('-i, --id <server-id>', 'start server id')
  .action(function(opts) 
    start(opts);
  );

// 最后实际执行app.js
function start(opts) 
  var absScript = path.resolve(opts.directory, 'app.js');
  if (!fs.existsSync(absScript)) 
    abort(SCRIPT_NOT_FOUND);
  

  var logDir = path.resolve(opts.directory, 'logs');
  if (!fs.existsSync(logDir)) 
    fs.mkdir(logDir);
  
  
  var ls;
  var type = opts.type || constants.RESERVED.ALL;
  var params = [absScript, 'env=' + opts.env, 'type=' + type];
  if(!!opts.id) 
    params.push('startId=' + opts.id);
  
  if (opts.daemon) 
    ls = spawn(process.execPath, params, detached: true, stdio: 'ignore');
    ls.unref();
    console.log(DAEMON_INFO);
    process.exit(0);
   else 
    ls = spawn(process.execPath, params);
    ls.stdout.on('data', function(data) 
      console.log(data.toString());
    );
    ls.stderr.on('data', function(data) 
      console.log(data.toString());
    );
  

2. app.js 关键流程

// 加载公共pomelo对象
var pomelo = require('pomelo');
// 创建唯一上下文对象app
var app = pomelo.createApp();
// app设置配置信息
app.configure(env, server, cb);
// 启动app
app.start();

以上是关于pomelo源码解析--启动项目(pomelo start)的主要内容,如果未能解决你的问题,请参考以下文章

pomelo源码解析--新建项目(cli工具: pomelo)

pomelo源码解析--新建项目(cli工具: pomelo)

pomelo源码解析--新建项目(cli工具: pomelo)

源码分析系列之PomeloForEgret

pomelo 安装 windows 下

Identity server4改用MySQL存储数据