【问题标题】:Express Http request timeoutExpress Http 请求超时
【发布时间】:2014-04-25 00:14:08
【问题描述】:

我对 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() 函数也不会关闭套接字。是否有与 keep-alive 的链接?带有网络套接字的链接?

如果它是网络套接字的链接,最好的做法是什么?我应该关闭套接字和(如果是的话)到底在哪里?

如果有需要可以看我的简单快递路线代码:

 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));

    });

});

【问题讨论】:

    标签: node.js http express websocket


    【解决方案1】:

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

    【讨论】:

    • 好的,谢谢。但我不确定 expressjs 抛出套接字超时异常是否是正常行为。在我的其他项目中,我从来没有遇到过 expressjs 的这个问题。
    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 2011-11-05
    • 2010-12-12
    • 1970-01-01
    • 1970-01-01
    • 2019-06-21
    • 2020-03-16
    相关资源
    最近更新 更多