我正在为我的 http 服务器构建一个设置管理器。我希望能够更改设置而不必终止整个过程。我希望能够更改的设置之一是更改端口号,我想出了多种解决方案:
- 杀死进程并重新启动它
- 调用 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);
资源: