23.15.检测和监控网络连接

23.15.1.问题
我想检测Internet连接和监视器是否可用。
23.15.2.解决办法
使用AIR monitoring API的ServiceMonitor, SocketMonitor, 和URLMonitor类。
23.15.3.讨论
Adobe AIR包含的类可检测网络资源是否可用,还有当连接改变时实时通知用户。这些类使得开发人员能够创建支持偶尔连接(occasional connectivity)的应用程序:当资源可用时,通过联机服务形成无缝的工作环境,当资源不可用时本地数据可被保存和读取。本地数据包括序列化对象:来自不同的文件,或加密的本地存储区或本地数据库。

你可以监听NativeApplication实例发出的networkChange事件判断网络连接是否改变。当连接可用或不可用时触发该事件,事件本身并没有很多关于连接的相关信息。因此,你需要使用事件处理器检测应用程序可工作在请求服务模式。

下面的例子为networkChange事件创建事件监听器:
+展开
-XML
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxmllayout="vertical"
networkChange="networkChangeHandler();">

<mx:Script>
<![CDATA[
private function networkChangeHandler( evt:Event ):void {
// check connection
}

]]>
</mx:Script>
</mx:WindowedApplication>

这个例子中<mx:WindowedApplication>根标签申明networkChange事件处理器,当网络连接发生变化时即会调用此事件处理器。应用程序启动不会立即去检查网络资源,因此如果有需要,你需要执行所需的操作以检查是否连接已可用。

networkChange事件提示应用程序只有在网络发生变化时才会发生,而不管所需服务是否可用。根据这个需求,你可以使用SocketMonitor和URLMonitor类检测所需服务是否可用。

ServiceMonitor类是所有监视类的基类,提供了简便的方法轮询服务的可用性。要检测HTTP连接是否改变,你可以使用URLMonitor对象,它是ServiceMonitor类的子类。下面的代码通过HTTP头检测web站点是否可用:
+展开
-ActionScript
private var monitor:URLMonitor;
private function startMonitor():void {
var req:URLRequest = new URLRequest( "http://www.adobe.com" );
req.method = URLRequestMethod.HEAD; 
monitor = new URLMonitor( req );
monitor.pollInterval = 30000;
monitor.addEventListener( StatusEvent.STATUS, statusHandler );
monitor.start();
}
private function statusHandler( evt:StatusEvent ):void {
trace ( "Available:"+ monitor.available );
trace( "Event code:"+ evt.code );
}

URLMonitor 对象的pollInterval属性值单位为毫秒。这个例子中,服务每30秒查询次HTTP 头,此服务一直持续下去,但是只有在第一次查询和网络连接发生变化时才会发出StatusEvent事件。这个例子中,startMonitor方法被调用后30秒statusHandler方法被调用,以后只有在URLMonitor实例的available属性发生变化时才会被调用,例如网络连接改变。

使用SocketMonitor实例检测socket连接和检测HTTP是类似的,只不过需要主机和端口参数:
+展开
-ActionScript
socketMonitor = new SocketMonitor( "www.adobe.com", 1025 );
socketMonitor.addEventListener(StatusEvent.STATUS,statusHandler );
socketMonitor.start();

加支付宝好友偷能量挖...


评论(0)网络
阅读(143)喜欢(0)flash/flex/fcs/AIR