ガイド開発ガイド

サーバーモジュールのホットアップデート

fibjsのhttpサーバーfibjs 、メモリ内にfibjsする独立したサーバープログラムです。つまり、バージョンが更新されたときにサービスプログラムを再起動する必要があることがよくあります。

次のサービスプログラムがあるとします。

  • web.jsハンドラー
  • 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();

app.js直接参照web.js時に各更新アプリケーション、両者が再起動する必要があり、 app.js 、あなたが聞かせて、同時にコードを更新することができます方法はありませんapp.js自動的に最新のロードweb.jsは?

fibjsのネイティブSandBoxモジュールを使用して、スムーズなホットアップデートを実現できます。 app.jsいくつかの変更を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がサイクルを開始すると、すべてのweb.jssvrweb.jsされたhandler用にweb.jsコンテンツで生成されたセキュリティモジュールが再びrequireweb.jsます。 web.jsのコンテンツを更新する必要がある場合は、ファイルを置き換えるだけで、サーバープログラムをスムーズに更新できます。