pomelo源码解析之组件解析(总结)

基础知识学习

需要的一些基础知识:
nodejs的加载
模块怎么包装的
模块到底导出了什么
js中的两个添加属性的接口:
defineProperty实际是__defineGetter__的升级版,后者在高版本中即将废弃,以下是文档:
__defineGetter__文档
defineProperty文档

pomelo中到底包含了什么东西

使用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阻塞

猜你喜欢

转载自blog.csdn.net/qq_37543025/article/details/85953009