Guía Guía de desenvolvemento

Actualización actualizada do módulo do servidor

fibjs O servidor http é un programa de servidor independente que reside na memoria, o que significa que moitas veces é necesario reiniciar o programa de servizo cando hai unha actualización de versión.

Supoña que existe o seguinte programa de servizo:

  • web.js manipulador de http
  • app.js Entrada de solicitude
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, cando cada actualización de aplicacións, ambas deben reiniciarse app.js, non hai forma de actualizar o código simultaneamente, de xeito que app.jsse carga automaticamente o último web.js?

Podemos usar o nativo de fibjs SandBoxMódulo para conseguir unha actualización en quente suave. Para app.jsfacer algúns 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.jsInicia un ciclo, cada 1s de novo requireun web.jsmódulo de seguridade de xeración de contido para svrremontar handler. Cando web.jso tempo necesario para actualizar o contido, simplemente substitúa o ficheiro, pode conseguir un programa de servidor de actualización sen problemas.

👉 [ Enrutamento de dominio ]