Mise à jour à chaud du module serveur
fibjs
Le serveur http est un programme serveur indépendant qui réside en mémoire, ce qui signifie que le programme de service doit souvent être redémarré lors d'une mise à jour de version.
Supposons qu'il existe le programme de service suivant :
web.js
gestionnaire httpapp.js
Entrée de l'application
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();
En app.js
référence directe web.js
, lors de chaque mise à jour des applications, elles doivent toutes les deux être redémarrées app.js
, il n'y a aucun moyen de mettre à jour simultanément le code, de sorte que app.js
le dernier charge automatiquement web.js
?
Nous pouvons utiliser le natif de fibjs SandBoxModule pour obtenir une mise à jour à chaud en douceur. Pour app.js
apporter quelques modifications :
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
Démarrez un cycle, toutes les 1s à nouveau require
un web.js
module de sécurité de génération de contenu pour le svr
remontage handler
. Lorsque web.js
le temps nécessaire pour mettre à jour le contenu, remplacez simplement le fichier, vous pouvez obtenir un programme de serveur de mise à jour en douceur.
👉 [ Routage de domaine ]