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 residente en la memoria, lo que significa que a menudo es necesario reiniciar el programa de servicio cuando se actualiza una versión.

Asuma las siguientes rutinas 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 referencia directa web.js , cuando cada actualización de aplicaciones, los dos debe reiniciar app.js , no hay manera de que pueda actualizar el código, al mismo tiempo, dejar que app.js cargar automáticamente las últimas web.js que?

Podemos implementar actualizaciones calientes 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, simplemente reemplace el archivo para lograr una actualización fluida del programa del servidor.