具体文件是:pomelo/lib/common/components/server.js
组件加载后写入app中 app.components.__server__
对外两个处理接口:
/**
* Proxy server handle
*/
pro.handle = function(msg, session, cb) {
this.server.handle(msg, session, cb);
};
/**
* Proxy server global handle
*/
Component.prototype.globalHandle = function(msg, session, cb) {
this.server.globalHandle(msg, session, cb);
};
每一个非master进程都会加载的组件,进行消息的处理。
这个组件比较复杂,我们慢慢来看。
pomelo/lib/server/server.js中
pro.start = function() {
if(this.state > ST_INITED) {
return;
}
this.globalFilterService = initFilter(true, this.app);
this.filterService = initFilter(false, this.app);
this.handlerService = initHandler(this.app, this.opts);
this.cronHandlers = loadCronHandlers(this.app);
loadCrons(this, this.app);
this.state = ST_STARTED;
};
可以看到启动时,加载了4个模块,具体分析下:
在initFilter中可以看到就是加载了app中过滤属性。这个过滤属性是可以在启动服务器前自由配置的。对应的就是application.js中的接口。
这些过滤器被filterService.js封装,filterService对外提供2个接口:
beforeFilter还有afterFilter,分别是消息前过滤和消息后过滤
很容易分析在handle和globalHandle中的使用过程。
doForward: RPC到msgRemote中进行处理(最终调用doHandle)。 注意:这个msgRemote只有后端服务器才会加载。
消息的具体处理模块。
也就是 app/servers/serverName/handler下的所有js模块的函数
加载配置:/config/crons.json 将当前服务器可用的写到this.crons中
最终暴露给外部是在application中的addCrons和removeCrons
具体文件是:pomelo/lib/common/components/connector.js
组件加载后写入app中 app.components.__connector__
主要是对pomelo/lib/connectors的封装,处理客户端的socket消息
connectors详解
在connector中包含有几个部分,挨个分析下
在getConnector中可以看到支持外部传入,默认使用的sioconnector
创建该组件时支持传入加解密函数,如果不传入就调用this.connector中加解密
对消息进行认证setPubKey、getPubKey
this.blacklist是黑名单ip的数组,没提供接口,可以直接写入
this.blacklistFun黑名单过滤函数,支持传入该函数
主要是跟加解密函数配合sendAsync
如果加解密函数中需要异步,则这个属性需要设置为true
使用字典算是额外的加密。在pomelo平台中有个通用的加解密模块
pomelo\lib\connectors\common\coder.js
如果要自己实现加解密的话,也需要对字典这里做处理
通上边的字典部分,也需要在加解密中做支持
this.server: 本身进程的server
this.session: 连接管理
this.connection: connection组件:
保存连接进来的玩家,连接数等信息
以上就完成了客户端连接过来,并通信的过程
本文地址:https://blog.csdn.net/qq_37543025/article/details/85950498
如对本文有疑问, 点击进行留言回复!!
网友评论