node.js - 长 POST node.js 上的套接字超时

标签 node.js sockets post timeout request

使用 node.js http.createServer 来监听 POST 请求。如果请求快速完成,则一切正常。如果请求完成时间 > 5 秒,我不会向客户端返回任何响应。

在创建的套接字上添加了事件监听器:

server.on('connection', function(socket) {
    log.info('SOCKET OPENED' + JSON.stringify(socket.address()));
    socket.on('end', function() { 
      log.info('SOCKET END: other end of the socket sends a FIN packet');
    });

    socket.on('timeout', function() { 
      log.info('SOCKET TIMEOUT');
    });

    socket.on('error', function(error) { 
      log.info('SOCKET ERROR: ' + JSON.stringify(error));
    });

    socket.on('close', function(had_error) { 
      log.info('SOCKET CLOSED. IT WAS ERROR: ' + had_error);
    });
});

在请求中间(开始后约 10 秒后)收到这些消息:

info: SOCKET TIMEOUT
info: SOCKET CLOSED. IT WAS ERROR: false

但是客户端套接字没有关闭,所以客户端等待响应。请求结束并成功完成,响应已发送(在关闭的套接字上!),但客户端仍在等待。

不知道如何阻止这些超时。从代码中删除了所有超时。尝试添加 KeepAlive,没有结果。

socket.setKeepAlive(true);

如何防止socket bultin超时?

最佳答案

来自 Node 的setTimeout documentation发生超时时,连接不会被切断。这就是浏览器仍在等待的原因。您仍然需要 end() 或 destroy() 套接字。您可以通过在套接字上调用 setTimeout 来增加超时。

socket.setTimeout(1000 * 60 * 300); // 5 hours

关于node.js - 长 POST node.js 上的套接字超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21045953/

相关文章:

node.js - 使用AWS IOT和SNS的Web推送通知

javascript - axios PUT 响应后更新 vuex 状态

ios - 关于如何记录 Websocket API 的建议

php - 获取Wordpress数组中Post的值

javascript - 在 NodeJS 中从 URL 获取图像并通过 POST 上传到另一个

node.js - 如何将 flutter 应用程序与 node.js 集成

python - 有没有办法通过 JavaScript 在我的网站中使用 TensorFlow 模型?

node.js - socket.io 一页多聊天

ios - IOS上使用BlueSocket框架的TCP连接问题

java - 将图像从 Android 客户端发送到 AppEngine Cloud Endpoint