Hot-update van de servermodule
fibjs
De 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.js
http-handlerapp.js
Toegang 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.js
directe 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.js
terwijl de code wordt bijgewerkt ?app.js
web.js
We kunnen het native bestand van fibjs gebruikenSandBoxmodule om soepele hot updates te realiseren. Breng app.js
enkele 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.js
Er wordt een cyclus gestart in , en require
elke 1s web.js
wordt een veilige module uit de inhoud geregenereerd om deze svr
opnieuw te kunnen monteren handler
. web.js
Wanneer de inhoud moet worden bijgewerkt, hoeft u alleen maar het bestand te vervangen om een soepele update van het serverprogramma te bewerkstelligen.