2013-02-28 61 views
0

控制器: 处理回发的代码在长时间运行的biz层中有一个db调用。 30分钟后,浏览器显示来自AJAX调用错误消息,但是我的数据库日志表明,该方法分贝仍在运行 - 跑的方式过去30分钟大关。应用程序ajax超时

我?是如何,当它在控制器中没有提出的Ajax错误引起人们的关注[log4j的并没有表现出任何被困错误]作为控制器仍在等待来自BIZ层反馈。

是否调整tomcat的超时帮助?我认为还不如应用程序仍在处理

笔者认为:

function runAjax(){ 
    $.ajax({ 
     type: "POST", 
     url: "Test.html", 
     data: { testparam1,testparam2}, 
     success: function(data){ 
      document.getElementById("processdata").innerHTML="Success"; 
     }, 
     error: function(request){ 
      document.getElementById("processdata").innerHTML="Error"; 
     } 
     }); 
} 
+0

是的,你需要解决这个问题的服务器端。 – 2013-02-28 22:34:52

回答

0

浏览器,又名JavaScript的,不会永远等待响应。经过一段时间(在这种情况下读取30分钟),它会放弃请求,认为服务器没有响应。 HTTP并没有真正设置为处理大于30分钟的请求,至少不是通过常规方式。

有一些选择。首先,您可以优化您在后端进行的任何操作,使其更快。我的意思是,如果查询运行需要30分钟以上,那么您可能需要重新考虑一下SQL方法。第二,您可以简单地分解步骤,以便您可以运行每一步,验证,然后运行下一步。取决于你在做什么,这可能会让你有可能同时做一些工作,加快这个过程。如果出现问题,这里的挑战就是回滚。

第三,你可以实现一个Pub/Sub模型。有几个框架可以做JavaScript的Pub/Sub。我曾经亲自使用过Atmosphere,它有一个很好的jQuery插件,并且当更高级的方法在浏览器中不可用时,可以回到更多的HTTP常规方法。在这个模型中,你的视图会提交请求,后端会排队工作并告诉视图订阅特定的队列/通道来获得结果。视图可以简单地等待响应。你可以发布请求,有一个interru页面,通过JavaScript直接刷新,直到后端说“好吧,我们完成了!”。很多较旧的Web应用程序曾用于长时间运行的事务。

我相信可能有1000多个选项可以使用,但如果您的请求总是需要很长时间才能运行,我认为AJAX不是您的工具。