您的位置:首页 > 其它

pomelo 学习零碎记录 1

2012-12-08 19:54 405 查看
一直想学习网游服务器方面的知识,但是这方面的资料比较少,一些开源的服务器代码又太庞大,所以一直没行动起来. 上礼拜在群里无意间得知网易开源了游戏服务器框架pomelo, 虽然是js写的服务器, 但是运行效率不错, 决定尝试学习一下, 在这里记录一些阅码过程中遇到的问题.

==================================

pemolo start

实际的命令为: node app.js env=development

==================================

var args = utils.argsInfo(process.argv);

其中process.argv的值为

0: /usr/local/bin/node
1: /helloWorld/game-server/app.js
2: env=development

===================================

var args = utils.argsInfo(process.argv);
this.setupEnv(args);

utils.argsInfo(process.argv)方法会提取服务器的配置信息,比如以下一些键值对:

env=development
serverType=connector
serverId=connector-server-1

this.setupEnv 设置env到settings字典中

args.main会返回当前启动文件的全路径,比如"/helloWorld/game-server/app.js"

=================================

Application.loadServers = function() {
//根据之前设置的env(运行环境development, production) 从server.json中读取相应的配置信息,存到settings字典的servers键中
this.loadConfig('servers', this.getBase() + '/config/servers.json');
//读取刚才保存在字典中的配置信息
var servers = this.get('servers');

var serverMap = {}, slist, i, l, server;
for(var serverType in servers) {
//serverType是servers.json文件中,对应运行环境下的每个服务器类型,比如connector area 等
slist = servers[serverType];
for(i=0, l=slist.length; i<l; i++) {
//slist[i]是每类服务器下的具体服务器信息 比如 {"id":"connector-server-1","host":"127.0.0.1","port":3150,"wsPort":3010}
server = slist[i];
server.serverType = serverType;
//以id为键保存JSON字符串,在JS下可以直接获取属性
serverMap[server.id] = server;
}
}

this.set('__serverMap__', serverMap);
};
loadServers这个方法功能可以概括为反序列号servers.json中定义的服务器信息到__serverMap__中,以供后面的代码读取

=====================================

//根据之前设置的env(运行环境development, production) 从master.json中读取相应的配置信息,存到settings字典的master键中

this.loadConfig('master', this.getBase() + '/config/master.json');

======================================

Application.processArgs(args)

会根据命令行输入的服务器类型 服务器ID等参数(serverType , serverId)的值保存到settings字典中,并设置curServer为输入id的JSON值,如果输入参数不包含上述的Type和Id,则设置serverType为'master',设置serverId为this.get('master').id

=======================================

Application.defaultConfiguration

综合前面的注释可以知道改方法的功能为读取server.json和master.json等服务器配置信息,保存到当前的字典中

========================================

在pomelo创建的模板中

var app = pomelo.createApp();

app.set('name', 'helloWorld');

app.defaultConfiguration();

其中pomelo.createApp()已经包含了app.defaultConfiguration(),为何后面还要再执行一次app.defaultConfiguration()???

==========================================

pomelo.js 文件底部的代码自动读取了components文件夹内的每个js文件,并通过Pomelo.__defineGetter__(name, load),将相应的js文件作为pomelo的输出

===========================================

刚启动时

app.start 中的 this.loadDefaultComponents(); 将获取master.js和monitor.js

================================

master.js

this.masterConsole.start 开始监听master指定的端口,

在其回调函数的starter.runServers(self.app)中执行如下类似命令,运行所有服务器

cd /Users/andy/hellopomelo/game-server && node /Users/andy/hellopomelo/game-server/app.js env=development serverType=connector serverId=connector-server-1

=================================

处理客户端发来的请求在文件:game-server/node_modules/pomelo/lib/components/connector.js
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: