Guide de développement du guide

Mise à jour à chaud du module serveur

Le serveur http de fibjs est un programme serveur indépendant qui fibjs en mémoire, ce qui signifie qu'il est souvent nécessaire de redémarrer le programme de service lors d'une mise à jour de version.

Supposons le programme de service suivant:

  • gestionnaire http web.js
  • entrée d'application app.js
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();

Dans app.js direct reference web.js , lorsque chaque application de mise à jour doit redémarrer app.js , il n'y a aucun moyen de mettre à jour le code en même temps, laissez app.js charger automatiquement le dernier web.js ?

Nous pouvons obtenir une mise à jour à chaud en douceur grâce au module SandBox natif de fibjs. Apportez quelques modifications à 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 début d'un cycle, tous lS à nouveau require d' un web.js module de sécurité généré de contenu pour svr remonta handler . Lorsque le contenu de web.js doit être mis à jour, il vous suffit de remplacer le fichier pour effectuer une mise à jour fluide du programme serveur.