使用Dojo时设置超时

时间:2013-09-10 15:11:02

标签: javascript dojo timeout undefined undefined-reference

我最近更新了一个使用Dojo向我的服务器发送异步请求的应用程序,该服务器使用cgi为这些请求提供服务。

我的问题如下。例如,发出请求的变量是

parent.sc_dojo.io.script.jsonp_sc_dojoIoScript2

此新服务需要很长时间才能将响应发送大约40 - 60秒,此后变量parent.sc_dojo.io.script.jsonp_sc_dojoIoScript2显示为UNDEFINED

我使用firebug进行了分析,请参阅下图以获取主要细节。

Petitions to my server responded in 40 to 50 secs

对服务器的请求有以下数据:

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,我真的不知道这个措施的单位,有什么想法吗?

1 个答案:

答案 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);
  });
});

具体问题
好的,最后。如果你有一个长的服务器端运行,这就是我要做的:

  1. 从客户端向启动作业的服务器发送请求
  2. 服务器使用可以轮询状态的唯一URL进行响应
  3. 在Javascript中,使用setInterval()定期检查返回的URL状态
  4. 当网址显示“状态”已完成时,请终止setInterval并发出最终通话以获取结果