Guía de desarrollo de la guía

Actualización en caliente del módulo del servidor

El servidor http de fibjs es un programa de servidor independiente que fibjs en la memoria, lo que significa que el programa de servicio a menudo necesita reiniciarse cuando se actualiza la versión.

Supongamos que existe el siguiente programa de servicio:

  • web.js http handler
  • entrada de la aplicación app.js
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 la referencia directa de app.js web.js , cuando cada actualización de aplicaciones, ambas deben reiniciar app.js , no hay forma de que pueda actualizar el código al mismo tiempo, ¿deja que app.js cargue automáticamente la última web.js ?

Podemos lograr una actualización en caliente sin problemas a través del módulo nativo SandBox de fibjs. Realice algunos cambios en app.js :

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); } // 每 1s 重新载入一遍 ./web.js 文件以更新 srv 的 handler coroutine.start(function() { while (true) { coroutine.sleep(1000); svr.handler = new_web(); } }) var svr = new http.Server(8080, new_web()); svr.start();

app.js inicio de un ciclo, cada vez más lS require un web.js contenido del módulo de seguridad generado por svr volvió a montar handler . Cuando el contenido en web.js necesita ser actualizado, solo necesita reemplazar el archivo para lograr una actualización sin problemas del programa del servidor.