2013-10-14 30 views
0

我有一个Adobe Air桌面应用程序,最近用于一个事件,当使用google.com作为一个轮询URL时,成千上万的人同时使用它开始获取失败的网络检查。让每个应用程序每3秒检查一次该URL,大约10分钟后,每个应用程序开始被重定向到Google上的验证页面,要求用户证明它们不是显然无法看到的机器人,因此所有用户被告知他们没有互联网。我已经在使用Akamai的高级流媒体插件(基于OSMF [使用NetStream])进行视频流媒体。有没有更好的方法来检查网络连接(最好只使用现有的NetStream对象)。谷歌阻止Adobe Air大规模网络检查

下面是网络监控现有代码:

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

因此,投票“google.com”背后的推理是看他们是否有互联网连接? – Ronnie

+0

是的,我宁愿通过OSMF使用现有的HTTP请求 – nathanjosiah

+0

如果OSMF流产生一个错误,你可以假设他们失去了连接或看我的答案 – Ronnie

回答

3

我不认为查询远程URL是检查互联网连接(每3秒至少)的最佳方式。 AIR必须检查网络本身,像这样的能力:

air.NativeApplication.nativeApplication.addEventListener(air.Event.NETWORK_CHANGE, onNetworkChange); 

function onNetworkChange(event) 
{ 
    //Check resource availability 
} 

的Event.NETWORK_CHANGE事件并不表示在所有 网络活动的改变,而只是说网络连接发生了变化。 AIR 不会尝试解释网络更改的含义。

http://help.adobe.com/en_US/AIR/1.5/devappshtml/WS5b3ccc516d4fbf351e63e3d118666ade46-7fcc.html

虽这么说,我把你的查询请求onNetworkChange事件内部的方式,只有当检查必要的。

+0

谢谢,这应该是一个更有效的检查。 – nathanjosiah