Gids voor ontwikkeling

Hot-update van de servermodule

fibjsDe http-server is een geheugenresident, onafhankelijk serverprogramma, wat betekent dat bij een versie-update het serviceprogramma vaak opnieuw moet worden opgestart.

Stel dat we het volgende serviceprogramma hebben:

  • web.jshttp-handler
  • app.jsToegang tot de applicatie
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();

In app.jsdirecte verwijzing web.js: elke keer dat de applicatie wordt bijgewerkt, moet deze opnieuw worden opgestart . Is er een manier om automatisch de nieuwste versie te laden app.jsterwijl de code wordt bijgewerkt ?app.jsweb.js

We kunnen het native bestand van fibjs gebruikenSandBoxmodule om soepele hot updates te realiseren. Breng app.jsenkele wijzigingen aan in:

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); } // update svr.handler every 1 second. coroutine.start(function() { while (true) { coroutine.sleep(1000); svr.handler = new_web(); } }) var svr = new http.Server(8080, new_web()); svr.start();

app.jsEr wordt een cyclus gestart in , en requireelke 1s web.jswordt een veilige module uit de inhoud geregenereerd om deze svropnieuw te kunnen monteren handler. web.jsWanneer de inhoud moet worden bijgewerkt, hoeft u alleen maar het bestand te vervangen om een ​​soepele update van het serverprogramma te bewerkstelligen.

👉【Praktijk voor webapplicaties met hoge prestaties