Leitfaden Entwicklungshandbuch

Hot Update des Servermoduls

fibjs 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 ein Versionsupdate vorliegt.

Nehmen Sie das folgende Serviceprogramm an:

  • 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();

Referenzierung web.js direkt in app.js , jedes Mal wenn die Anwendung aktualisieren, müssen Sie neu starten app.js Gibt es eine Möglichkeit zu lassen app.js automatisch den neuesten laden web.js während den Code zu aktualisieren?

Mit dem nativen SandBox Modul von SandBox können wir ein reibungsloses Hot-Update 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, müssen Sie nur die Datei ersetzen, um eine reibungslose Aktualisierung des Serverprogramms zu erreichen.