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 a menudo es necesario reiniciar el programa de servicio cuando hay una actualización de versión.

Asuma el siguiente programa de servicio:

  • web.js 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();

Al hacer referencia a web.js directamente en app.js , debe reiniciar app.js cada vez que actualice la aplicación. ¿Hay alguna manera de permitir que app.js cargue automáticamente las últimas web.js mientras actualiza el código?

Podemos lograr una actualización en caliente sin problemas 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 el contenido en web.js necesita ser actualizado, solo necesita reemplazar el archivo para lograr una actualización sin problemas del programa del servidor.