一直想学习网游服务器方面的知识,但是这方面的资料比较少,一些开源的服务器代码又太庞大,所以一直没行动起来. 上礼拜在群里无意间得知网易开源了游戏服务器框架pomelo, 虽然是js写的服务器, 但是运行效率不错, 决定尝试学习一下, 在这里记录一些阅码过程中遇到的问题.
==================================
pemolo start
实际的命令为: node app.js env=development
==================================
var args = utils.argsInfo(process.argv);
this.setupEnv 设置env到settings字典中
args.main会返回当前启动文件的全路径,比如"/helloWorld/game-server/app.js"
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