我试图连接到一个现有的彗星风格的长民意测验服务使用航空应用程序。该服务期望客户端使用连接:保持活动标头来发出GET请求。此请求将保持长时间开放,以便服务器可以推送数据。在我的应用程序中,连接在30秒后用IOError终止。
这是URLStream的一个无文档限制吗?对adl的限制(我只是通过adl运行我的应用程序)?
服务器不向客户端发送任何“保持活动”消息,但不幸的是,这不是我能控制的事情。
更新
为了测试这一点,我使用一个小php脚本(下面由leggetter链接)设置了一个精简版本,并通过一个简单的AIR应用程序来点击它。我发现无论我使用URLStream还是URLLoader,30秒后连接都会关闭。PHP:
<?php
set_time_limit(0);
sleep(40);
echo("START!");
header('Content-type: text/plain');
echo str_pad('PADDING', 2048, '|PADDING');
$sleep_time = 1;
$count = 0;
while($count < 20) {
echo($count);
flush();
$count = $count + 1;
sleep($sleep_time);
}
echo("end");
?>和Actionscript:
private function beginSubscribeToNotifications():void {
var req:URLRequest = new URLRequest(myPHPFile);
req.method = URLRequestMethod.GET;
req.requestHeaders.push( new URLRequestHeader("Connection", "Keep-Alive"));
_urlLoader = new URLLoader();
_urlLoader.addEventListener(Event.COMPLETE, onComplete);
_urlLoader.addEventListener(IOErrorEvent.IO_ERROR, onIOError);
_urlLoader.load(req);
}
private function onComplete(e:Event):void {
_message = (String)(_urlLoader.data);
}如果我将php脚本中的初始睡眠时间调整为超过30秒,就会触发IOError事件。如果我降低了睡眠时间,但请求继续在30秒后添加数据,则调用onComplete事件,但_urlLoader.data为空。
这个过程完全成功的唯一方法是,整个过程在30秒之前结束。
发布于 2011-09-29 21:39:14
嗯,这有点尴尬,但我想我应该张贴,以防其他人参与这件事。我通过设置URLRequestDefaults.idleTimeout的值来解决我的问题。
根据文档:当此属性设置为0(默认值)时,运行时使用操作系统定义的默认空闲超时值。默认的空闲超时值在操作系统(如Mac、Linux或Windows)和操作系统版本之间有所不同。
我想对Windows 7来说是30秒。
https://stackoverflow.com/questions/7557739
复制相似问题