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

本文主要探讨了pomelo框架的基础知识,包括nodejs加载机制、模块封装以及js添加属性的方法。重点解析了pomelo框架中的核心组成部分,如通过require导入的`pomelo/lib/pomelo.js`,该文件导出的对象包含了一系列组件。pomelo在require时会执行fs.readdirSync加载lib/components、filters/handler和filters/rpc的js模块,将它们加入到pomelo.components中。每个进程的application实例会加载并实例化这些组件,具体过程发生在`appUtil.loadDefaultComponents`和`application.load`中。文章还列举了部分关键组件,如session、proxy、remote等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

基础知识学习

需要的一些基础知识:
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阻塞
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值