Hot-Update des Servermoduls
fibjs
Der http-Server ist ein speicherresidentes, unabhängiges Serverprogramm, was bedeutet, dass bei einem Versionsupdate das Dienstprogramm häufig neu gestartet werden muss.
Angenommen, wir haben das folgende Serviceprogramm:
web.js
http-Handlerapp.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();
Im app.js
direkten Verweis web.js
muss die Anwendung jedes Mal neu gestartet werden, wenn sie aktualisiert wird . Gibt es eine Möglichkeit, die neueste Version automatisch zu laden app.js
, während der Code aktualisiert wird ?app.js
web.js
Wir können den nativen Code von fibjs verwendenSandBoxModul, um reibungslose Hot-Updates zu erreichen. Nehmen Sie app.js
einige Änderungen vor an:
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.js
Ein Zyklus wird gestartet, und require
alle 1 Sekunde web.js
wird aus dem Inhalt ein sicheres Modul zum svr
erneuten Mounten neu generiert handler
. web.js
Wenn der Inhalt aktualisiert werden muss , ersetzen Sie einfach die Datei, um eine reibungslose Aktualisierung des Serverprogramms zu erreichen.