我正在尝试制作简单的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');
};
答案 0 :(得分:0)
我不知道你要做什么,但我认为你在错误的水平上做你想做的事。
如果您希望对Web服务器的传入连接请求阻止,直到服务器准备好处理它们,您需要停止在套接字上调用accept(2)
系统调用。 (我无法想象node.js,或者确实任何 Web服务器,会使这项任务变得非常简单。只有在收到整个格式正确的请求时才会调用request
回调。在会话启动之后。)您的操作系统内核将继续接受的连接,直到给出listen(2)
系统调用的最大积压。在慢速网站上,这可能就足够了。在繁忙的网站上,这不是一眨眼。
如果您希望对Web服务器的传入连接请求被拒绝,直到服务器准备好处理它们,您需要close(2)
侦听套接字。 node.js通过close()
method使其可用,但这会破坏服务器的状态。当你想再次运行时,你必须重新安装回调。