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 que fibjs en la memoria, 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 actualizaciones en caliente fluidas a través del módulo SandBox nativo 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 web.js necesario actualizar el contenido de web.js , simplemente reemplace el archivo para lograr una actualización sin problemas del programa del servidor.