Pomelo热更新刷新handler和remote 以及 pomelo使用bearcat进行热更新
一. 开启 原生 pomelo 的hotreload支持
pomelo版本: 2.2.5 , 编辑脚本 app.js 加入如下代码
//全局配置
app.configure('production|development', function() {
//让所有服务器 都支持 handle 和remote 热更新
let serverConfig = {
'reloadHandlers':true,
'reloadRemotes':true,
};
app.set('serverConfig',serverConfig);
});
原理:监听文件改动,在文件变化以后重新加载,只能更新 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 热更新
根据 treasures 配置好 context.json
{
"name": "bearcat",
"scan": "app",
"beans": []
}
scan 就是要检测的目录 .
- 修改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();
}
测试过程:
- 开启服务器 node app.js
- 调用 connector.entryHandler.enter , 会打印 i am old say
- 修改 i am old say ==> i am new say
- 控制台输出正在 reload ,等待reload 完毕.
- 调用 connector.entryHandler.enter , 会打印 i am new say
注意:
这行如果写在函数外面,则不能热更新,每次修改文件要生效,都必须重新加载文件
var Student = require('./student');说明 bearcat 更新主要是更新 新创建的对象! 以前的对象是使用以前的代码,这种情况是更新不了的!
Pomelo热更新刷新handler和remote 以及 pomelo使用bearcat进行热更新的更多相关文章
- android线程控制UI更新(Handler 、post()、postDelayed()、postAtTime)
依照以下的理解就是handler与ui线程有一定的关联能够由于更新界面仅仅能在主线程中全部更新界面的地方能够在接受消息的handleMessage那里还有更新界面能够在handler.port(new ...
- MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新
MFC编辑框接收数据动态更新与刷新方法代码示例-如何让编辑框内容实时更新 关键代码: //发送数据通知 //from txwtech@163.com LRESULT CCommSampleDlg::O ...
- svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录
svn更新路径,解决办法详细步骤,eclipse里面的更新方法,svn废弃位置,Windows环境,svn服务器地址换了,如何更新本地工作目录 Windows下,svn服务器IP本来是内网一台服务器上 ...
- POJ 2155 Matrix (二维线段树入门,成段更新,单点查询 / 二维树状数组,区间更新,单点查询)
题意: 有一个n*n的矩阵,初始化全部为0.有2中操作: 1.给一个子矩阵,将这个子矩阵里面所有的0变成1,1变成0:2.询问某点的值 方法一:二维线段树 参考链接: http://blog.csdn ...
- Oracle编辑数据时提示:这些查询结果不可更新,请使用ROWI或者SELECT……FOR UPDATE获得可更新结果
我们在对Oracle数据库进行操作时,有时会在查询完结果后想要对其中的某些数据进行操作,当我们点击编辑(一个锁标志)是,会提示我们上述问题中的错误:这些查询结果不可更新,请使用ROWI或者SELECT ...
- Handler实现线程之间的通信-下载文件动态更新进度条
1. 原理 每一个线程对应一个消息队列MessageQueue,实现线程之间的通信,可通过Handler对象将数据装进Message中,再将消息加入消息队列,而后线程会依次处理消息队列中的消息. 2. ...
- NodeJS”热部署“代码,实现动态调试(hotnode,可以实现热更新)
NodeJS”热部署“代码,实现动态调试 开发中遇到的问题 如果你有 PHP 开发经验,会习惯在修改 PHP 脚本后直接刷新浏览器以观察结果,而你在开发 Node.js 实现的 HTTP 应用时会 ...
- 微信小程序热更新,小程序提示版本更新,版本迭代,强制更新,微信小程序版本迭代
相信很多人在做小程序的时候都会有迭代每当版本迭代的时候之前老版本的一些方法或者显示就不够用了这就需要用到小程序的热更新.或者说是提示升级小程序版本 editionUpdate:function(){ ...
- Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据
代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...
随机推荐
- vscode编辑器配置C语言编译运行环境
1.安装C/C++插件 2.安装编译环境,这里选择MinGW(http://mingw.org/ ) 选择一个安装目录,如:E:\workspace\MinGW mingw32-gcc开头的(包括了m ...
- 20165330 2017-2018-2 《Java程序设计》第1周学习总结
教材学习内容总结 java的历史,地位,特点. java的平台介绍 java应用程序的开发及源文件的编写规则 java反编译特点 安装JDK Windows上 在安装JDK后设置系统环境变量,因为我的 ...
- 修改Android模拟器的system分区,以及加入SuperSU
http://www.claudxiao.net/2013/10/persistent-change-emulator-system-partition/ 对Android的模拟器,如果要修改其s ...
- SOCKS5的出现缓解了各种具体协议需要专门设计代理协议的困难局面
socks5_百度百科 https://baike.baidu.com/item/socks5/8915011?fr=aladdin 如果您的机器具有一个合法的 Internet IP 地址, 或者您 ...
- lsof,fuser,xargs,print0,cut,paste,cat,tac,rev,exec,{},双引号,单引号,‘(字符串中执行命令)
cut用来从文本文件或标准输出中抽取数据列或者域,然后再用paste可以将这些数据粘贴起来形成相关文件. 粘贴两个不同来源的数据时,首先需将其分类,并确保两个文件行数相同.paste将按行将不同文件行 ...
- 转:Java并发编程与技术内幕:线程池深入理解
版权声明:本文为博主林炳文Evankaka原创文章,转载请注明出处http://blog.csdn.net/evankaka 目录(?)[+] ); } catch (InterruptedExcep ...
- python基础-第五篇-5.3装饰器
小白发呆的看着窗外,同事们陆陆续续的地来到公司,想起算法,小白就飘飘然了.突然后面传来一声呼唤,原来是小刘! 小刘:不好意思啊!堵车了,就来晚了点,不耽误你的时间,咱们就开启的今天的培训内容吧! 小白 ...
- SyntaxError: Missing parentheses in call to 'print'. Did you mean print('XXXXXX')?
因为Python3中取消了以前Python 2中的语法. 所以Python 3再使用python2的语法格式就会报错 错误信息中提示需要加上括号,字符串可以用单引号或双引号括起来 这样就不会报错了.
- des/3des
一.python 1. des3 python平台的DES3 + base64 加密解密, 有两个常用的库pycrypto和pyDes 1)pycrypto des3.py #coding=utf-8 ...
- git---小乌龟提交
下载地址:https://tortoisegit.org/ 比如我修改了文件: 1.本地提交在项目目录内右键,点击git commit按钮 2.拉去线上最新代码,与本地代码合并 3.向线上推送