Open sss316 opened 4 years ago
pomelo\lib\common\service\handlerService.js你看看这个服务内代码
let handler
module.exports = function(app) {
if(handler)return handler;
return handler = new Handler(app);
};
你自己改成这样不就完了.
@wangkunmeng 看代码干啥,直接测试就能看到一直调用。 @whtiehack 目前我就是这么干的,直接拿demo改项目,容易误导新手。
只是执行了两次,启动一次,加载一次。
同一个类型服务器只调用2次,但是别的服务器类型为了rpc远程调用,启动时也会调用该module.exports。所以会执行很多次!
如果该函数有大量运算或文件读写,就需要判断服务器类型,并且使用 @whtiehack 的写法。
let handler; module.exports = function(app) { if(handler)return handler; handler = new Handler(app); if(app.getServerType()!='conn'){ /////do sth.///// } return handler; };
除handle所在服务器,只有connector会去,new其他的服务器的handler. 这是为了远程调用,但是这也没有多次执行该函数,一个connector只是执行一个而已, 疑惑,
module.exports = function(app) { return new Handler(app); }; 这个是demo的写法,如果该Handler需要读取文件,项目会多次创建Handler并且多次读取文件,导致性能下降。 程序员自己写逻辑难免出现这种问题, 建议:从底层防范,让module.exports永远执行一次。