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
==================================
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
相关文章推荐
- 转帖-pomelo 学习零碎记录 5 部署Lordofpomelo
- pomelo 学习零碎记录 2
- pomelo 学习零碎记录 3
- pomelo 学习零碎记录 5 部署Lordofpomelo
- pomelo 学习零碎记录 4
- 记录一些学习到的零碎的知识点。
- 关于学习boost时的那些零碎记录(回忆里待续) 第二篇
- android零碎学习记录之 TextSwithcer
- JavaScript基础学习零碎知识记录
- JavaScript&nbsp;对象学习零碎知识记录
- VIM 零碎学习记录
- Sybase学习中记录下的零碎东西
- 在这里记录自己学习中遇到的零碎的容易忽略的知识点,不定时总结更新
- 关于学习boost时的那些零碎记录(回忆里待续)
- C++零碎学习记录
- Linux学习记录--ACL权限控制
- django中日志使用学习记录
- 20071107学习记录 关于实体类的理解
- 学习记录 Eclipse常用快捷键及其演练
- 关于廖雪峰yield,协程,异步的一些学习记录