没有合适的资源?快使用搜索试试~ 我知道了~
pomelo源码分析.docx
2星 需积分: 9 20 下载量 128 浏览量
2017-11-28
15:58:09
上传
评论
收藏 466KB DOCX 举报
温馨提示
试读
16页
pomelo源码分析 简单介绍pomelo源码已经框架结构,让你更好的理解整个框架
资源推荐
资源详情
资源评论
Pomelo 框架
Pomelo 启动流程
1.create app 创建应用 // application.js
2.Init app 初始化 //application.js
3.defaultConfiguration 配置// apputil.js
4.setupEnv //配置环境 apputil.js
5.Load master //加载 master apputil.js loadConfigBaseApp //application.js
6.Load servers //加载 servers apputil.js
7.processArgs // 进程参数 apputil.js
8.Configlogger //配置日志 apputil.js
在执行完上面的操作之后,app 进入到 INITED 状态,同时 pomelo 的 createApp 返回。
1.创建应用 create app
Application.set = function (setting, val, attach) {
if (arguments.length === 1) {
return this.settings[setting];
}
this.settings[setting] = val;
if(attach) {
this[setting] = val;
}
return this;
};
Application.get = function (setting) {
return this.settings[setting];
};
2.开启应用程序 app.start(); app.js
Application.start = function(cb) {
//
开始时间
this.startTime = Date.now();
if(this.state > STATE_INITED) {
utils.invokeCallback(cb, new Error('application has already start.'));
return;
}
var self = this;
appUtil.startByType(self, function() {
appUtil.loadDefaultComponents(self);
var startUp = function() {
appUtil.optComponents(self.loaded, Constants.RESERVED.START, function(err) {
self.state = STATE_START;
if(err) {
Pomelo 框架
utils.invokeCallback(cb, err);
} else {
logger.info('%j enter after start...', self.getServerId());
self.afterStart(cb);
}
});
};
var beforeFun = self.lifecycleCbs[Constants.LIFECYCLE.BEFORE_STARTUP];
if(!!beforeFun) {
beforeFun.call(null, self, startUp);
} else {
startUp();
}
});
};
加载默认组件 apputil.js
appUtil.loadDefaultComponents(self); //加载默认组件 apputil.js
module.exports.loadDefaultComponents = function(app) {
var pomelo = require('../pomelo');
// load system default components
if (app.serverType === Constants.RESERVED.MASTER) {
// console.log('_____________++'+pomelo.master +'+++++_________________________');
app.load(pomelo.master, app.get('masterConfig'));
// This.setting[masterconfig]=function{new master;};pomelo.master='__master__'
Pomelo.components[master]=new master; this.loaded={new master }
} else {
app.load(pomelo.proxy, app.get('proxyConfig'));
This.setting[proxyConfig]=function{new proxy;};pomelo.proxy='__proxy__'
Pomelo.components[proxy]=new proxy; this.loaded={new proxy}
if (app.getCurServer().port) {
app.load(pomelo.remote, app.get('remoteConfig'));
This.setting[remoteConfig]=function{new remote;};pomelo.remote='__remote__'
Pomelo.components[remote]=new remote; this.loaded={new remote}
}
if (app.isFrontend()) {
app.load(pomelo.connection, app.get('connectionConfig'));
app.load(pomelo.connector, app.get('connectorConfig'));
app.load(pomelo.session, app.get('sessionConfig'));
// compatible for schedulerConfig
if(app.get('schedulerConfig')) {
app.load(pomelo.pushScheduler, app.get('schedulerConfig'));
} else {
app.load(pomelo.pushScheduler, app.get('pushSchedulerConfig'));
}
}
app.load(pomelo.backendSession, app.get('backendSessionConfig'));
//This.setting[backendseession]=function{new backendseession;};pomelo.master='__backendseession__'
Pomelo.components[backendseession]=new backendseession; this.loaded={new master,new backendseession }
Pomelo 框架
app.load(pomelo.channel, app.get('channelConfig'));
//This.setting[channelConfig]=function{new channel;};pomelo.channel='__channel__'
Pomelo.components[channel]=new channel; this.loaded={new master,new backendseession,new channel, }
app.load(pomelo.server, app.get('serverConfig'));
This.setting[serverconfig]=function{new server;};pomelo.channel='__server__'
Pomelo.components[server]=new server; this.loaded={new master,new backendseession,new channel,new server }
}
app.load(pomelo.monitor, app.get('monitorConfig'));
This.setting[monitorconfig]=function{new monitor;};pomelo.channel='__monitor__'
Pomelo.components[monitor]=new monitor; this.loaded={new master,new backendseession,new channel,new server ,new monitor}
3.load 函数
Application.load = function(name, component, opts) {
if(typeof name !== 'string') {
opts = component;
component = name;
name = null;
if(typeof component.name === 'string') {
name = component.name;
}
}
if(typeof component === 'function') {
component = component(this, opts);
}
if(!name && typeof component.name === 'string') {
name = component.name;
}
if(name && this.components[name]) {
// ignore duplicat component
logger.warn('ignore duplicate component: %j', name);
return;
}
this.loaded.push(component);
if(name) {
// components with a name would get by name throught app.components later.
this.components[name] = component;
}
return this;
Pomelo get 追加属性 pomelo.js
_____________pomelo.backendSession ___________load:module.exports = new backendseesion
_____________pomelo.channel ___________load:module.exports = new channel
_____________pomelo.connection ____________load:module.exports = new connection
_____________pomelo.connector ____________load:module.exports = new connector
_____________pomelo.dictionary____________ load:module.exports = new dictionary
_____________pomelo.master____________ load:module.exports = new master
_____________pomelo.monitor____________ load:module.exports = new monitor
Pomelo 框架
_____________pomelo.protobuf____________ load:module.exports = new protobuf
_____________pomelo.proxy____________ load:module.exports = new proxy
____________ pomelo.pushScheduler____________ load:module.exports = new pushscheduler
____ _____ __pomelo.remote____________ load:module.exports = new remote
_____________pomelo.server____________ load:module.exports = new server
_____________pomelo.session____________ load:module.exports = new session
fs.readdirSync(__dirname + '/components').forEach(function (filename) {
if (!/\.js$/.test(filename)) {
return;
}
var name = path.basename(filename, '.js');
var _load = load.bind(null, './components/', name);
Pomelo.components.__defineGetter__(name, _load);
Pomelo.__defineGetter__(name, _load);
});
_____________pomelo.serial ___________load:module.exports = new Filter
____________ pomelo.time ___________load:module.exports = new Filter
_____________pomelo.timeout ___________load:module.exports = new Filter
_____________pomelo.toobusy ___________load:module.exports = new Filter
fs.readdirSync(__dirname + '/filters/handler').forEach(function (filename) {
if (!/\.js$/.test(filename)) {
return;
}
var name = path.basename(filename, '.js');
var _load = load.bind(null, './filters/handler/', name);
Pomelo.filters.__defineGetter__(name, _load);
Pomelo.__defineGetter__(name, _load);
});
_____________pomelo.rpcLog ___________load:module.exports = new Filter
____________ pomelo.toobusy ___________load:module.exports = new Filter
fs.readdirSync(__dirname + '/filters/rpc').forEach(function (filename) {
if (!/\.js$/.test(filename)) {
return;
}
var name = path.basename(filename, '.js');
var _load = load.bind(null, './filters/rpc/', name);
Pomelo.rpcFilters.__defineGetter__(name, _load);
});
//var _load = load.bind(null, './components/', name);
function load(path, name) {
if (name) {
return require(path + name);
}
return require(path);
Start 启动
Application.start = function(cb) {
//开始时间
this.startTime = Date.now();
剩余15页未读,继续阅读
资源评论
- xy6038763992019-04-16水平不够不要下,看不懂
kojie_chen
- 粉丝: 183
- 资源: 12
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功