我最近更新了一个使用Dojo向我的服务器发送异步请求的应用程序,该服务器使用cgi为这些请求提供服务。
我的问题如下。例如,发出请求的变量是
parent.sc_dojo.io.script.jsonp_sc_dojoIoScript2
此新服务需要很长时间才能将响应发送大约40 - 60秒,此后变量parent.sc_dojo.io.script.jsonp_sc_dojoIoScript2显示为UNDEFINED
我使用firebug进行了分析,请参阅下图以获取主要细节。
对服务器的请求有以下数据:
Connection Keep-Alive
Content-Type text/javascript; charset=utf-8
Date Tue, 10 Sep 2013 12:39:22 GMT
Keep-Alive timeout=5, max=100
Server Apache/2.2.22 (Ubuntu)
Transfer-Encoding chunked
超时范围从5到100,我真的不知道这个措施的单位,有什么想法吗?
答案 0 :(得分:1)
关于Keep Keep-Alive
当客户端浏览器向HTTP / 1.1服务器发送“Connection:Keep-alive”标头时,浏览器会说“嘿,我想进行长时间的对话,所以在第一次交换后不要关闭连接”。
保持活动“超时”值以秒为单位。 “max”值是无单位的,表示每个连接的最大服务请求数。总而言之,这些增加了客户端的请求“嘿,我想进行长时间的对话,所以不要在第一次交换后关闭连接但是如果没有在5秒内交换(超时),那么 如果超过100个请求来回(最大),我很高兴关闭连接。“服务器响应它将为超时和最大服务提供的实际值
关闭连接的惩罚是必须打开一个新连接。一些现代浏览器限制了同时打开连接的数量,因此保持这些值太小可能会引入延迟(当您的应用等待免费连接时)。另一方面,服务器不需要同意所请求的超时和最大值:服务器设置自己的限制。
有关详细信息,请参阅这些文章:
关于道场超时
我没有看到您的代码或dojo版本,但是dojo确实允许您设置等待响应的时间长度为the timeout property in the XHR request。默认超时为“never”。代码如下。
在实践中,“从不”会产生误导:浏览器有their own defaults表示保持活动超时和upstream routers might have their own timeouts。
尽量保持简短。如果响应时间超过15秒,则可能需要a different design approach to the problem:反向ajax,轮询,组合响应等。
require(['dojo/request/xhr'], function (xhr) {
xhr(
'http://www.example.com/echo',
{ timeout:15000 /* change this, units are milliseconds */, handleAs:'json' }
).then(function (r) {
console.log(r);
});
});
具体问题
好的,最后。如果你有一个长的服务器端运行,这就是我要做的: