Express Http请求超时

时间:2014-03-19 01:02:11

标签: node.js http express websocket

我对NodeJs中的套接字超时有疑问。

我第一次添加以下代码:

    req.socket.once('timeout', function(err) {
        imports.logger.warn('Express socket timeout.', err);
        res.status(504).end('Connection timeout');
    });

我在页面加载后很长时间内都会在控制台中记录Express Socket超时错误。 所以(为了调试)我尝试添加这一行:

    req.socket.setTimeout(4000);

最后我看到我的所有请求都在4秒后处理Express套接字超时。 我在网上搜索,我发现了很多信息,但我仍然不明白。

我不明白为什么关闭请求的res.json()函数也不会关闭套接字。有保持活着的链接吗?与网络套接字的链接?

如果它是指向网络套接字的链接,那么最佳实践是什么?我应该关闭套接字和(如果是)确切的位置吗?

如有必要,您可以看到我的简单快捷路线代码:

 app.get(apiUrl + '/:id', function (req, res) {

    NewsFeed.findById(req.params.id, function (err, newsFeed) {

        if (err) {
            return app.error(res, 404, 'Error 404: No news found');
        }

        res.json(formatNewsFeed(newsFeed));

    });

});

1 个答案:

答案 0 :(得分:0)

在HTTP中,不要求您对请求的套接字进行严格的一对一映射。如果可能,浏览器和服务器将在请求完成后保留套接字,以便可以在以后的请求中重用它。打开一个新的套接字需要时间,并且能够重用现有套接字会更快。这称为HTTP Keep-Alive。通常,您不必担心底层套接字,只能使用请求对象。