我最近使用了一个Adobe Air桌面应用程序,当使用google.com
作为轮询URL时,成千上万人同时使用的Adobe Air桌面应用程序开始失败。每个应用程序每3秒检查一次该URL,大约10分钟后,每个应用程序开始被重定向到Google上的验证页面,要求用户证明他们不是机器人,显然他们看不到,因此所有用户被告知他们没有互联网。我已经在使用Akamai的Advanced Streaming插件(基于OSMF [使用NetStream])进行视频流传输。有没有更好的方法来检查网络连接(最好只使用现有的NetStream对象)。
以下是网络监视器的现有代码:
public function checkNetwork(url:String):void {
var urlRequest:URLRequest = new URLRequest(url);
urlRequest.method = "GET";
urlMonitor = new URLMonitor(urlRequest);
urlMonitor.addEventListener(StatusEvent.STATUS,onStatusChange);
urlMonitor.pollInterval = 3000;
urlMonitor.start();
}
private function onStatusChange(event:StatusEvent):void {
if(urlMonitor.available) {
isNetworkDown = false;
dispatchEvent(new Event("NetworkManager.NETWORK_UP"));
}
else {
isNetworkDown = true;
dispatchEvent(new Event("NetworkManager.NETWORK_DOWN"));
}
}
答案 0 :(得分:3)
我不认为轮询远程URL是检查互联网连接的最佳方式(至少每3秒)。 AIR能够像这样检查网络本身:
air.NativeApplication.nativeApplication.addEventListener(air.Event.NETWORK_CHANGE, onNetworkChange);
function onNetworkChange(event)
{
//Check resource availability
}
Event.NETWORK_CHANGE事件并不表示所有内容都发生了更改 网络活动,但仅限于网络连接已更改。空气 并不试图解释网络变化的含义。
http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7fcc.html
话虽如此,我会将您的轮询请求放在onNetworkChange
事件中,只有在必要时才会检查。