Горячее обновление серверного модуля
fibjs
HTTP-сервер - это независимая серверная программа, которая находится в памяти, что означает, что служебную программу часто необходимо перезапускать при обновлении версии.
Допустим, есть следующая сервисная программа:
web.js
обработчик httpapp.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
время, необходимое для обновления содержимого, просто замените файл, можно добиться плавного обновления программы сервера.
👉 [ Маршрутизация домена ]