Actualización en caliente del módulo de servidor
fibjs
El servidor http es un programa de servidor independiente que reside en la memoria, lo que significa que cuando hay una actualización de versión, a menudo es necesario reiniciar el programa de servicio.
Supongamos que tenemos el siguiente programa de servicio:
web.js
controlador httpapp.js
Entrada de la aplicación
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.js
referencia directa web.js
, cada vez que se actualiza la aplicación, se debe reiniciar . ¿Hay alguna manera de cargar automáticamente la última versión app.js
mientras se actualiza el código ?app.js
web.js
Podemos usar el nativo de fibjs.SandBoxMódulo para lograr actualizaciones en caliente sin problemas. Realice app.js
algunos 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.js
Se inicia un ciclo y se regenera un módulo seguro a partir del contenido require
cada 1 segundo para su remontaje . Cuando sea necesario actualizar el contenido, simplemente reemplace el archivo para lograr una actualización sin problemas del programa del servidor.web.js
svr
handler
web.js