其实我很早就有在一些交流群里发过
1.在不重启服务的情况下实时更新函数。 采用数据库做functionname - functiontext表
服务启动,将表加载进缓存,执行某一步骤时,根据functionname拉取缓存中的function。 此时采用EVAL方法。 因此,此时只需要更新缓存和数据库,即可实时更新函数。
关于EVAL方法的一些弊端,大家自行解决。我的套路就不提供了。
2.全局单传参 基于SESSION的全局单传参。 因为以前用EXPRESS用的很多。传参多的时候自己头疼,于是想到了一个方法。用session做储值。 我的session是挂在REDIS上的,也就是跑得内存,一个session你放很多东西进去也不会超过100KB的数量级。 哪怕是跑企业级服务,不用担心SESSION造成的内存崩溃。 而且SESSION是会过期的。
好了。言归正传。就是req.session 我tar了一个req.session.cache。
比如说从数据库读的用户信息提供全局一直使用。 req.session.cache.user=db;
另外比如我在最后一步 res.render{req.session.page,req.session.pageconfig}; 我在任何时候需要任何传参,只需要一个传参req就全部解决。 原生NODE可以写出同样的方法。
长期测试,以上两种方法的性能都很稳定。
不重启平滑升级服务器 参见 http://baoz.me/420310
@ngot 不要把FIBJS拿来看。。。文档还没健全,这两年是用不起来的。
@MiguelValentine 给你提供思路。不一定要用fibjs。这个思路可以拿来用。
@ngot 我又不维护NODE。我自己写部分汇编取代业务倒是真的。。
全局变量本来,就很臭了,还用全局session。你可能没跑过海量并发。问题可是很严重的。
@ngot 全局变量类似的需求,一般的解决办法是,在需要的地方,做沙箱,用局部变量传进去。
实时更新这个有点丧心病狂,哈哈 第二个没看懂,什么叫做全局单传参?
@ravenwang 任何时候只需要request 这一个参数就可以了。因为其他参数都写在request这个OBJECT里。
@MiguelValentine 我也觉得这不是个好主意,项目规模小也许能省点事,参数一旦多起来这些参数本身怎么组织就会成问题