当服务器处理超过120秒的请求时,Node Express Server连接超时

时间:2014-04-03 12:40:48

标签: node.js express

每当向NodeJS express服务器发送请求超过120秒以响应客户端时,我都会遇到请求超时错误。

我尝试使用request.setTimeOut(200000);增加服务器超时,但只有从localhost访问时才有效..并且通过IP地址超时。在网站上运行时同样的问题。

请查找我的服务器代码以保留请求超过120秒:

var express = require('express')
var app = express();
app.set('port', process.env.PORT || 3003);
app.listen(app.get('port'));
app.post('/cmfm', function (req, res) {
    req.setTimeout(600000);
    //req.socket.setKeepAlive(true,1);    
    var startTime = (new Date()).getTime();
    var response = {};
    response.data = 1;
    console.log('request starts to process.. ');
    setTimeout(function () {
        var endTime = (new Date()).getTime();
        console.log('Total Time taken to run --> ' + (endTime - startTime));
        res.json(response);
    }, 180000);
});

客户端代码请求服务器:

$.ajax({
    url: "/cmfm",
    type: "POST",
    contentType: "application/json", // content type is must    
    cache: false,
}).done(function (resultdata) {
    alert('timout passed - ' + resultdata.data);
})
.fail(function () {
    alert('Timout failed');
});

  • 本地主机:3003
    它按预期工作。 ajax done在180秒后被触发

  • IPADDRESS:3003
    它会在120秒后触发ajax.fail(),而不会在服务器中完成setTimeOut Callback fn。

请帮我解决这个问题。

1 个答案:

答案 0 :(得分:1)

不确定,但您可以尝试设置超时客户端

$.ajax({
  url: "/cmfm",
  type: "POST",
  contentType: "application/json",
  timeout: 200000,
  cache: false,
}).done(function (resultdata){
  alert('timout passed - ' + resultdata.data);
}).fail(function() {
  alert('Timout failed');
});

否则,似乎连接超时是由客户端和服务器之间的某些东西触发的(例如代理,防火墙,ecc ......)