Leitfaden Entwicklungshandbuch

Hot-Update des Servermoduls

Der http-Server von fibjs ist ein unabhängiges Serverprogramm, das fibjs im Speicher befindet. fibjs bedeutet, dass das Dienstprogramm häufig neu gestartet werden muss, wenn die Version aktualisiert wird.

Angenommen, es gibt das folgende Serviceprogramm:

  • web.js http handler
  • app.js Anwendungseintrag
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.js direkter Referenz web.js müssen beide, wenn sie Anwendungen aktualisieren, app.js neu app.js . Es gibt keine Möglichkeit, den Code gleichzeitig zu aktualisieren. Lassen Sie app.js automatisch die neuesten web.js laden.

Mit dem nativen SandBox Modul von SandBox können wir reibungslose Aktualisierungen erzielen. app.js Sie einige Änderungen an 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 Beginn eines Zyklus, alle lS wieder require eine web.js Inhalt erzeugte Sicherheitsmodul für svr remounted handler . Wenn der Inhalt in web.js aktualisiert werden muss, ersetzen Sie einfach die Datei, um eine reibungslose Aktualisierung des Serverprogramms zu erreichen.