Guida allo sviluppo della guida

Aggiornamento a caldo del modulo server

Il server http di fibjs è un programma server indipendente che fibjs in memoria, il che significa che il programma di servizio spesso deve essere riavviato quando la versione viene aggiornata.

Supponiamo che ci sia il seguente programma di servizio:

  • gestore http web.js
  • voce dell'applicazione 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();

Nel riferimento diretto app.js web.js , quando ogni applicazione di aggiornamento, entrambe devono riavviare app.js , non è possibile aggiornare il codice contemporaneamente, lasciare che app.js carichi automaticamente l'ultimo web.js vero?

Possiamo raggiungere smussare gli aggiornamenti caldi attraverso nativa di fibjs SandBox modulo. Apporta alcune modifiche a 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 inizio di un ciclo, ogni web.js require nuovamente un modulo di sicurezza generato dal contenuto web.js per svr rimontato handler . Quando il contenuto in web.js deve essere aggiornato, è sufficiente sostituire il file per ottenere un aggiornamento regolare del programma server.