Actualización en caliente do módulo do servidor
fibjsO servidor http é un programa de servidor independente residente na memoria, o que significa que cando hai unha actualización de versión, o programa de servizo adoita ter que reiniciarse.
Supoñamos que temos o seguinte programa de servizo:
web.jsmanejador httpapp.jsAplicación de entrada
1
2
3
4
5
6// web.js
var _ver = new Date();
module.exports = function (r) {
r.response.write("Hello, new word @ " + _ver);
}
1
2
3
4
5
6
7
8
9// app.js
var http = require("http");
var vm = require("vm");
var coroutine = require("coroutine");
var webServer = require("./web");
var svr = new http.Server(8080, webServer);
svr.start();
En app.jsreferencia directa web.js, cada vez que se actualiza a aplicación, débese reiniciar . ¿Hai algunha maneira de cargar automaticamente a máis recente app.jsmentres se actualiza o código ?app.jsweb.js
Podemos usar o nativo de fibjsSandBoxmódulo para conseguir actualizacións rápidas suaves. Fai app.jsalgúns cambios en:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23// app.js
var http = require("http");
var vm = require("vm");
var coroutine = require("coroutine");
// var webServer = require("./web");
function new_web() {
return new vm.SandBox({
mq: require("mq")
}).require("./web.js", __dirname);
}
// update svr.handler every 1 second.
coroutine.start(function() {
while (true) {
coroutine.sleep(1000);
svr.handler = new_web();
}
})
var svr = new http.Server(8080, new_web());
svr.start();
app.jsIníciase un ciclo en , e rexenérase un módulo seguro a partir do contido requirecada 1 s para volver montar . Cando o contido necesita ser actualizado, só tes que substituír o ficheiro para conseguir unha actualización fluida do programa do servidor.web.jssvrhandlerweb.js
