我们知道启动pomelo服务器是命令pomelo start,那执行pomelo start到底都做了些什么?服务器之间是怎么连接的?客户端是怎么给服务器发消息的?下面我们通过源码一步步来展开。
1. 启动命令,最后实际执行app.js
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);
});
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 关键流程
var pomelo = require('pomelo');
var app = pomelo.createApp();
app.configure(env, server, cb);
app.start();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)