如何暂停http服务器并恢复它?

时间:2011-12-08 08:21:31

标签: node.js

我正在尝试制作简单的http服务器,可以暂停和恢复,我看过Nodejs API,这里http://nodejs.org/docs/v0.6.5/api/http.html

但是这对我来说无法帮助,我已经尝试在“请求”事件中删除事件监听器并添加回来,但是每次我尝试暂停和恢复时,监听回拨呼叫都会增加,这里我做了一些代码:

var httpServer = require('http').Server();
var resumed = 0;

function ListenerHandler(){
    console.log('[-] HTTP Server running at 127.0.0.1:2525');
};

function RequestHandler(req,res){
    res.writeHead(200,{'Content-Type': 'text/plain'});
    res.end('Hello, World');
};

function pauseHTTP(){
     if(resumed){
            httpServer.removeAllListeners('request');
            httpServer.close();
            resumed = 0;
            console.log('[-] HTTP Server Paused');
     }
};

function resumeHTTP(){
    resumed = 1;
    httpServer.on('request',RequestHandler);
    httpServer.listen(2525,'127.0.0.1',ListenerHandler);
    console.log('[-] HTTP Server Resumed');
};

1 个答案:

答案 0 :(得分:0)

我不知道你要做什么,但我认为你在错误的水平上做你想做的事。

如果您希望对Web服务器的传入连接请求阻止,直到服务器准备好处理它们,您需要停止在套接字上调用accept(2)系统调用。 (我无法想象node.js,或者确实任何 Web服务器,会使这项任务变得非常简单。只有在收到整个格式正确的请求时才会调用request回调。在会话启动之后。)您的操作系统内核将继续接受的连接,直到给出listen(2)系统调用的最大积压。在慢速网站上,这可能就足够了。在繁忙的网站上,这不是一眨眼。

如果您希望对Web服务器的传入连接请求被拒绝,直到服务器准备好处理它们,您需要close(2)侦听套接字。 node.js通过close() method使其可用,但这会破坏服务器的状态。当你想再次运行时,你必须重新安装回调。