需要的一些基础知识:
nodejs的加载
模块怎么包装的
模块到底导出了什么
js中的两个添加属性的接口:
defineProperty实际是__defineGetter__的升级版,后者在高版本中即将废弃,以下是文档:
__defineGetter__文档
defineProperty文档
使用pomelo首先需要导出pomelo对象,例如var pomelo = require(‘pomelo’);
可以看到最终调用的文件为node_modules/pomelo/index.js -> node_modules/pomelo/lib/pomelo.js
阅读源码可以发现最终导出一个对象: var Pomelo = module.exports = {};
同时发现在pomelo中还有直接读取文件载入的过程fs.readdirSync
这些是执行函数,所以在require时会直接执行
分析源码可知,会载入node_modules/pomelo/lib下的components, filters/handler, filters/rpc的所有js模块,并写入pomelo
最终分析出:
var pomelo = require('pomelo');
导出的对象结构如下:
pomelo = {
version: 版本字符串, // pomelo/package.json中的"version"
events: 消息名对象, // pomelo/lib/util/events.js模块
components: { // pomelo/lib/components中的所有js模块
backendSession: object,
channel: object,
connection: object,
connector: object,
dictionary: object,
master: object,
monitor: object,
protobuf: object,
proxy: object,
pushScheduler: object,
remote: object,
server: object,
session: object,
},
backendSession: object, // 同上,这里这么写真的蛋疼。强行使pomelo内部看着东西更多了
channel: object,
connection: object,
connector: object,
dictionary: object,
master: object,
monitor: object,
protobuf: object,
proxy: object,
pushScheduler: object,
remote: object,
server: object,
session: object,
filters: { // pomelo/lib/filters/handler中的所有js模块
serial: object,
time: object,
timeout: object,
toobusy: object,
},
serial: object, // 同上
time: object,
timeout: object,
toobusy: object,
rpcFilters: { // pomelo/lib/filters/rpc中的所有js模块
rpclog: object,
toobusy: object,
},
connectors: { // pomelo/lib/connectors中4个模块
sioconnector: object,
hybridconnector: object,
udpconnector: object,
mqttconnector: object,
},
pushSchedulers: { // pomelo/lib/pushSchedulers中2个模块
direct: object,
buffer: object,
},
createApp: function, // 创建实体application
app: object, // 调用过createApp才会赋值,返回创建的app
};
pomelo.components中就是pomelo平台中的所有组件。
对于每一个进程来说,都有一个application实例,每个实例都会通过pomelo对象加载对应的components组件并实例化
组件加载位置: appUtil.loadDefaultComponents
组件实例化位置:application.load 这里还会往application.component中写入属性
详细组件解析链接:
components
backendSession、session、channel、dictionary、protobuf、pushScheduler、pushSchedulers
server、connection、connector
master、monitor
proxy、remote
connectors
filters rpcFilters:
平台提供的一些基础过滤模块,可以自行使用
serial: 保证消息的请求顺序
time: 记录消息往返时间
timeout: 超时
toobusy: 阻塞
rpcLog: 记录rpc消息
toobusy: rpc阻塞