http サーバーの設定マネージャーを構築しています。プロセス全体を強制終了せずに設定を変更できるようにしたい。変更できるようにしたい設定の 1 つは、ポート番号を変更することであり、さまざまな解決策を考え出しました。
- プロセスを強制終了して再起動する
- server.close() を呼び出してから、最初のアプローチを実行します
- server.close() を呼び出し、同じプロセスで新しいサーバーを初期化します
問題は、各アプローチの影響がどうなるかわからないことです。最初の方法が機能することはわかっていますが、次のことを実現したいと思っています。
- 新しいリクエストを受け入れずに、既存のリクエストに応答する
- 新しいサーバーのメモリにデータを保持する
- アップタイムの損失を可能な限り少なくする
私が欲しいものすべてを手に入れる方法はありますか?server.close() の API は希望を与えてくれます。
server.close(): Stops the server from accepting new connections.
私のサーバーは、私が作成したクライアントと、ブラウザーを介して接続する非常に限られた数のクライアントのみがアクセスできるため、ポートの変更を通知できます。ポートを変更することは一般的に悪い考えであることは理解していますが、それが便利な場合や必要になる可能性があるエッジケースを考慮したいと考えています。
PSそれが何かを変えるなら、私は接続を使用しています。
PPS 比較的関係ありませんが、UNIX サーバー ソケットを使用したり、ホスト名を変更したりすると、何が変わりますか? これは、より関連性の高いユースケースである可能性があります。
PPPS このコードは、server.close() を使用する際の問題を示しています。以前のサーバーはどれも強制終了されませんが、同じリソースにアクセスできるサーバーがさらに作成されます...
var http = require("http");
var server = false,
curPort = 8888;
function OnRequest(req,res){
res.end("You are on port " + curPort);
CreateServer(curPort + 1);
}
function CreateServer(port){
if(server){
server.close();
server = false;
}
curPort = port;
server = http.createServer(OnRequest);
server.listen(curPort);
}
CreateServer(curPort);
資力: