gpt4 book ai didi

node.js - 更改端口而不丢失数据

转载 作者:太空宇宙 更新时间:2023-11-04 02:54:13 25 4
gpt4 key购买 nike

我正在为我的 http 服务器构建一个设置管理器。我希望能够更改设置而不必终止整个过程。我希望能够更改的设置之一是更改端口号,我想出了多种解决方案:

  • 终止进程并重新启动
  • 调用 server.close(),然后执行第一种方法
  • 调用 server.close() 并在同一进程中初始化新服务器

问题是,我不确定每种方法的影响是什么。我知道第一个会起作用,但我真的很想完成这些事情:

  • 响应现有请求而不接受新请求
  • 在新服务器的内存中维护数据
  • 损失尽可能少的正常运行时间

有什么办法可以得到我想要的一切吗? server.close() 的 API 给了我希望:server.close():停止服务器接受新连接。

我的服务器只能由我创建的客户端以及通过浏览器连接的极少数客户端访问,因此我将能够通知他们端口更改。我知道更改端口通常是一个坏主意,但我希望考虑到方便或可能需要的边缘情况。

附注如果这改变了任何事情,我正在使用 connect。

P.P.S。相对不相关,但如果我使用 UNIX 服务器套接字或更改主机名,会发生什么变化?这可能是一个更相关的用例。

P.P.P.S。此代码说明了使用 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);

资源:

http://nodejs.org/docs/v0.4.4/api/http.html#server.close

最佳答案

我测试了 close() 函数。它似乎什么也没做。服务器仍然接受其端口上的连接。重新启动该过程是我的唯一方法。

我使用了以下代码:

var http = require("http");

var server = false;
function OnRequest(req,res){
res.end("server now listens on port "+8889);
CreateServer(8889);
}
function CreateServer(port){
if(server){
server.close();
server = false;
}
server = http.createServer(OnRequest);
server.listen(port);
}
CreateServer(8888);

关于node.js - 更改端口而不丢失数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5474957/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com