首页

通过修改AJAX超时timeout设置解决服务端配置connectionTimeout、worker.master.socket_timeout及Timeout 的连接超时限制

标签:Ext.Ajax,$ajax,apache,jk,tomcat,Timeout,socket_timeout,connectionTimeout,jquery,超时     发布时间:2017-09-10   

一、前言

最近通过前端Ext.Ajax.request请求等待大量数据同步到Mysql,希望任务未完成之前前端页面一直处于等待中状态,由于后端tomcat的connectionTimeout="20000",因此20秒后前端就报异常error提示,相关配置如下

前端Ext.Ajax.request默认配置如下

Ext.getCmp('index_bar_processing').setText("处理中..."); @b@Ext.Ajax.request({@b@	 url: "/page/index/dateimport.action",@b@	 params: {keyword: words},@b@	 method: "post",@b@	 success: function(response){ @b@		 Ext.getCmp('index_bar_processing').setText(""); @b@		 alertMsg("结果", "同步成功");@b@	 }, failure: function(){@b@		 errorMsg("结果", '同步失败!');@b@	 }@b@ });

tomcat连接配置如下

<Connector executor="tomcatThreadPool"@b@               port="8080" protocol="HTTP/1.1" @b@               connectionTimeout="20000" @b@               redirectPort="8443" />

二、解决方法

1.修改前端ajax设置如下(timeout: 100000000  - 单位:毫秒)

Ext.getCmp('index_bar_processing').setText("处理中..."); @b@Ext.Ajax.request({@b@	 url: "/page/index/dateimport.action",@b@	 params: {keyword: words},@b@	 method: "post",@b@	 timeout: 100000000,@b@	 success: function(response){ @b@		 Ext.getCmp('index_bar_processing').setText(""); @b@		 alertMsg("结果", "同步成功");@b@	 }, failure: function(){@b@		 errorMsg("结果", '同步失败!');@b@	 }@b@ });

或者修改后端tomcat延时(connectionTimeout="100000000" - 单位:毫秒 )

<Connector executor="tomcatThreadPool"@b@               port="8080" protocol="HTTP/1.1" @b@               connectionTimeout="100000000" @b@               redirectPort="8443" />

三、相关配置

1.基于$.ajax的相关配置如下

$.ajax({  @b@    url: '/page/index/dateimport.action',@b@    timeout: 100000000,  @b@    type: 'POST',  @b@    data: {},  @b@    dataType:'json',//返回的数据格式@b@  success:function(data){ //请求成功的回调函数@b@    alert("同步成功");@b@  },@b@    error: function() {  @b@        alert("同步失败 !");  @b@    }  @b@});

2.关于apache的httpd.conf配置超时如下

#  @b@# Timeout: The number of seconds before receives and sends time out.  (单位:秒)@b@#  @b@Timeout 100000

3.JK的配置文件/etc/httpd/conf/workers.properties,(单位:秒)

worker.master.socket_timeout=100000
@b@