Leitfaden-Entwicklungsleitfaden

Hot-Update des Servermoduls

fibjs Der http-Server ist ein unabhängiges Serverprogramm, das sich im Arbeitsspeicher befindet, was bedeutet, dass das Dienstprogramm bei einem Versionsupdate oft neu gestartet werden muss.

Angenommen, es gibt das folgende Dienstprogramm:

  • web.js http-Handler
  • app.js Bewerbungseingang
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.jsdirektem Bezug web.js, wenn jedes Update-Anwendungen, beide müssen neu gestartet werden app.js, gibt es keine Möglichkeit, den Code gleichzeitig zu aktualisieren, so dass app.jsautomatisch die neuesten web.jsgeladen werden?

Wir können das native von fibjs verwenden SandBoxModul für ein reibungsloses Hot-Update. Um app.jseinige Änderungen vorzunehmen:

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.jsStarten Sie einen Zyklus, alle 1s erneut requireein web.jsSicherheitsmodul zur Inhaltsgenerierung zum erneuten svrEinhängen handler. Wenn web.jsdie Zeit zum Aktualisieren des Inhalts erforderlich ist, einfach die Datei ersetzen, können Sie ein reibungsloses Update-Server-Programm erreichen.

👉 [ Domänen-Routing ]