Node.js HTTP服务器关闭时间过长。

3
我有一个Node.js HTTP服务器。在发送一次请求并收到响应后,我尝试使用server.close()关闭它,但是关闭需要很长时间(超过60秒)。可能的问题是什么?
编辑:
目前我正在使用Chrome高级REST客户端进行测试,发送一次请求后得到响应后会出现缓慢关闭的情况。据我所知,它不应该被keep-alive卡住。我在response.write()后肯定会用response.end()关闭我的响应。
以下是一些代码:
handleRequest = function(request, response) {
    var body = '';
    request.on('data', function (data) {
        body += data;
    });
    request.on('end', function() {
        // get some data from db...
        response.setHeader('Content-Type', 'application/json');
        response.write(result);
        response.end();
    });
});

var server = http.createServer(handleRequest);
server.listen(8000);

process.on('SIGINT', function() {
    if (server != undefined) {
        console.log("Closing Server...");
        server.close(function (e) {
            if (e) {
                throw 'Error on closing server';
            } else {
                console.log("Server closed");
            }
        });
    }
});

2
卡在保持连接上了吗?https://dev59.com/uG435IYBdhLWcg3wtCWQ - Matt Ball
4
如果你能提供一些示例代码,那会很有帮助。你确定你结束了你的回复吗? - Munim
我认为您忘记了可能导致问题的原因:“从数据库获取一些数据...” - robertklep
我发现响应返回了keep-alive,尽管我没有在任何地方设置它,可能的原因是什么? - irenal
2个回答

2

请检查一下,在发送数据之后,是否已经关闭了响应(response)。

response.end()

如果这个方法无效,您可以发布您的代码样例。


0
如果您想终止服务器进程,您应该在response.end()之后尝试使用process.exit('SIGINT');process.exit()。这将结束您的服务器和脚本的执行。
请注意,除了SIGKILLSIGSTOP之外的所有退出信号都可以被进程拦截。 server.close()仅停止服务器接受新连接并关闭所有连接到此服务器的连接,这些连接没有发送请求或等待响应。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接