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)