zoukankan      html  css  js  c++  java
  • Pomelo热更新刷新handler和remote 以及 pomelo使用bearcat进行热更新

    一. 开启 原生 pomelo 的hotreload支持

    1. pomelo版本: 2.2.5 , 编辑脚本 app.js 加入如下代码

          //全局配置
          app.configure('production|development', function() {
            //让所有服务器 都支持 handle 和remote 热更新
            let serverConfig = {
              'reloadHandlers':true,
              'reloadRemotes':true,
            };
            app.set('serverConfig',serverConfig);
          });
      
    2. 原理:监听文件改动,在文件变化以后重新加载,只能更新 remote rpc 和 handler

        //监听 handler
        var watchHandlers = function(app, handlerMap) {
          var p = pathUtil.getHandlerPath(app.getBase(), app.serverType);
          if (!!p){
            fs.watch(p, function(event, name) {
              if(event === 'change') {
                handlerMap[app.serverType] = Loader.load(p, app);
              }
            });
          }
        };
    

    注意: 在 remote和handler 文件里不要保存局部数据,否则刷新以后会丢失.

    二 .使用bearcat 热更新

    1. 参考项目 https://github.com/NetEase/treasures

    2. 根据 treasures 配置好 context.json

    {
    	"name": "bearcat",
    	"scan": "app",
        "beans": []
    }
    

    scan 就是要检测的目录 .

    1. 修改app.js,添加如下内容
    //BEARCAT_HOT 一定要配置成 on
    //BEARCAT_LOGGER 如果不关闭,则pomelo的日志输出 会将所有的日志都输出到 pomelo-undefined.log 里面.
    var contextPath = require.resolve('./context.json');
    bearcat.createApp([contextPath],
      { 
        BEARCAT_HOT: 'on',// 开启热更新,如果是off 那么不会热更新
        BEARCAT_LOGGER: 'off',//setup 'off' to turn off bearcat logger configuration,
      }
    );
    
    // 启动APP
    // app.start();
    bearcat.start(function() {
      app.set('bearcat', bearcat);
      // start app
      app.start();
    });
    

    通过上面简单的操作,bearcat 就已经配置好了.试一试修改文件,控制台就会有提示bearcat重新加载.

    三. bearcat更新示例

    entryHandler.js
    Handler.prototype.enter = function (msg, session, next) {
        //这行如果写在函数外面,则不能热更新,每次修改文件要生效,都必须重新加载文件
        var Student = require('./student');
        var _stu = new Student();
        _stu.say();
    
        next(null,0);
        return;
      }
    
    student.js
    var Student = function(){
    
    }
    Student.prototype.say = function(){
      console.log("i am old say");
      console.log("i am old say");
      console.log("i am old say");
      console.log("i am old say");
    }
    
    module.exports = function(){
      return new Student();
    }
    

    测试过程:

    1. 开启服务器 node app.js
    2. 调用 connector.entryHandler.enter , 会打印 i am old say
    3. 修改 i am old say ==> i am new say
    4. 控制台输出正在 reload ,等待reload 完毕.
    5. 调用 connector.entryHandler.enter , 会打印 i am new say

    注意:

    1. 这行如果写在函数外面,则不能热更新,每次修改文件要生效,都必须重新加载文件
      var Student = require('./student');

    2. 说明 bearcat 更新主要是更新 新创建的对象! 以前的对象是使用以前的代码,这种情况是更新不了的!

  • 相关阅读:
    封装logging模块,创建日志器
    excel的读写封装,利用openpyxl
    利用yaml封装配置文件模块
    自动生成小学四则运算项目(更新)
    基于cmmi的软件工程及实训指导 第一章 读后感
    第一次数据库学习
    第一个爬虫和测试
    预测球队成绩
    第一个网页
    科学计算与可视化
  • 原文地址:https://www.cnblogs.com/cheerupforyou/p/9102887.html
Copyright © 2011-2022 走看看