Руководство по развитию

Горячее обновление серверного модуля

fibjs HTTP-сервер - это независимая серверная программа, которая находится в памяти, что означает, что служебную программу часто необходимо перезапускать при обновлении версии.

Допустим, есть следующая сервисная программа:

  • web.js обработчик http
  • 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внести некоторые изменения:

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Запустите цикл, снова каждые 1 requireс web.jsмодуль безопасности создания контента для svrповторной установки handler. Когда web.jsвремя, необходимое для обновления содержимого, просто замените файл, можно добиться плавного обновления программы сервера.

👉 [ Маршрутизация домена ]