Guía de desarrollo de guías

Actualización en caliente del módulo de servidor

fibjs El servidor http es un programa de servidor independiente que reside en la memoria, lo que significa que el programa de servicio a menudo debe reiniciarse cuando hay una actualización de la versión.

Suponga que existe el siguiente programa de servicio:

  • web.js controlador http
  • app.js Entrada de aplicación
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.jsreferencia directa web.js, cuando cada aplicación actualiza, ambas deben reiniciarse app.js, no hay forma de que pueda actualizar simultáneamente el código, de modo que app.jsautomáticamente se carga la última web.js?

Podemos usar el nativo de fibjs SandBoxMódulo para lograr una actualización en caliente sin problemas. Para app.jsrealizar algunos cambios:

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.jsInicie un ciclo, cada 1s nuevamente requireun web.jsmódulo de seguridad de generación de contenido para volver a svrmontar handler. Cuando web.jsel tiempo necesario para actualizar el contenido, simplemente reemplace el archivo, puede lograr un programa de servidor de actualización sin problemas.

👉 【Enrutamiento de dominio