pomelo 学习零碎记录 1

一直想学习网游服务器方面的知识,但是这方面的资料比较少,一些开源的服务器代码又太庞大,所以一直没行动起来. 上礼拜在群里无意间得知网易开源了游戏服务器框架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
    //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

转载于:https://www.cnblogs.com/andyleeblog/archive/2012/12/08/2809179.html

你可能感兴趣的:(json)