一. 开启 原生 pomelo 的hotreload支持

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

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

  1. //监听 handler
  2. var watchHandlers = function(app, handlerMap) {
  3. var p = pathUtil.getHandlerPath(app.getBase(), app.serverType);
  4. if (!!p){
  5. fs.watch(p, function(event, name) {
  6. if(event === 'change') {
  7. handlerMap[app.serverType] = Loader.load(p, app);
  8. }
  9. });
  10. }
  11. };

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

二 .使用bearcat 热更新

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

  2. 根据 treasures 配置好 context.json

  1. {
  2. "name": "bearcat",
  3. "scan": "app",
  4. "beans": []
  5. }

scan 就是要检测的目录 .

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

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

三. bearcat更新示例

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

测试过程:

  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 更新主要是更新 新创建的对象! 以前的对象是使用以前的代码,这种情况是更新不了的!

Pomelo热更新刷新handler和remote 以及 pomelo使用bearcat进行热更新的更多相关文章

  1. android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)

    依照以下的理解就是handler与ui线程有一定的关联能够由于更新界面仅仅能在主线程中全部更新界面的地方能够在接受消息的handleMessage那里还有更新界面能够在handler.port(new ...

  2. MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新

    MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新 关键代码: //发送数据通知 //from txwtech@163.com LRESULT CCommSampleDlg::O ...

  3. svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录

    svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...

  4. POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)

    题意: 有一个n*n的矩阵,初始化全部为0.有2中操作: 1.给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成0:2.询问某点的值 方法一:二维线段树 参考链接: http://blog.csdn ...

  5. Oracle编辑数据时提示:这些查询结果不可更新,请使用ROWI或者SELECT……FOR UPDATE获得可更新结果

    我们在对Oracle数据库进行操作时,有时会在查询完结果后想要对其中的某些数据进行操作,当我们点击编辑(一个锁标志)是,会提示我们上述问题中的错误:这些查询结果不可更新,请使用ROWI或者SELECT ...

  6. Handler实现线程之间的通信-下载文件动态更新进度条

    1. 原理 每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息. 2. ...

  7. NodeJS”热部署“代码,实现动态调试(hotnode,可以实现热更新)

    NodeJS”热部署“代码,实现动态调试   开发中遇到的问题 如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会 ...

  8. 微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代

    相信很多人在做小程序的时候都会有迭代每当版本迭代的时候之前老版本的一些方法或者显示就不够用了这就需要用到小程序的热更新.或者说是提示升级小程序版本 editionUpdate:function(){ ...

  9. Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据

    代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...

随机推荐

  1. Pulsar

    The Apache Software Foundation Announces Apache® Pulsar™ as a Top-Level Project : The Apache Softwar ...

  2. Python代码样例列表

    扫描左上角二维码,关注公众账号 数字货币量化投资,回复“1279”,获取以下600个Python经典例子源码 ├─algorithm│       Python用户推荐系统曼哈顿算法实现.py│    ...

  3. 火狐不支持backgroundPosition的js插件

    用js backgroundPositionX,backgroundPositionY设置在firefox下无法识别,用backgroundPosition同样在火狐无法识别.要识别只能用js插件来实 ...

  4. NFS服务基础

    NFS服务部署: (一)NFS环境准备: 操作系统 角色 IP地址 CentOS Linux release 7.3.1611 (Core) NFS服务端 192.168.152.138 CentOS ...

  5. Linux下的内核抢占

    2017-03-03 很遗憾之前在介绍进程调度的文章中,虽然涉及到了内核抢占,但是却没有对其进行深入介绍,今天就稍微总结下内核抢占. 内核抢占在一定程度上减少了对某种事件的响应延迟,这也是内核抢占被引 ...

  6. python模块之PIL模块(生成随机验证码图片)

    PIL简介 什么是PIL PIL:是Python Image Library的缩写,图像处理的模块.主要的类包括Image,ImageFont,ImageDraw,ImageFilter PIL的导入 ...

  7. sql server dba概念系列引用

    原文转自:https://www.cnblogs.com/gaochundong/p/everyone_is_a_dba_sqlserver_architecture.html <人人都是 DB ...

  8. c# 方法传递参数

    一.参数的使用方法: 1.值参数(Value Parameter ) 格式:方法名称(参数类型 参数名称[,参数类型 参数名称]) 2.引用参数(Reference Parameter ) 格式:方法 ...

  9. java-mybaits-00501-案例-映射分析-订单商品数据模型

    1.数据模型分析思路 1.每张表记录的数据内容          分模块对每张表记录的内容进行熟悉,相当 于你学习系统 需求(功能)的过程. 2.每张表重要的字段设置          非空字段.外键 ...

  10. 【Spring Task】定时任务详解实例-@Scheduled

    Spring的任务调度,采用注解的形式 spring的配置文件如下,先扫描到任务的类,打开spirng任务的标签 <beans xmlns="http://www.springfram ...