Guía de desarrollo de guías

Actualización en caliente del módulo de servidor

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

Suponga que existe el siguiente programa de servicio:

  • controlador http web.js
  • 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 app.js web.js referencia web.js , cuando cada aplicación actualiza, ambos deben reiniciar app.js , no hay forma de que puedas actualizar el código al mismo tiempo, ¿dejar que app.js cargue automáticamente el último 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 comienzo de un ciclo, cada lS nuevamente require un módulo de seguridad generado por contenido web.js para svr remounted handler . Cuando el contenido en web.js necesita actualizarse, solo necesita reemplazar el archivo para lograr una actualización sin problemas del programa del servidor.