ネットワーク接続の監視



Adobe® AIR™ は、AIR アプリケーションがインストールされたコンピュータのネットワーク接続の変更を確認するための方法を提供します。この情報は、ネットワークから取得したデータをアプリケーションで使用する場合に役立ちます。また、アプリケーションで、ネットワークサービスを使用できるかどうかを確認することもできます。

ネットワーク接続の変更の検出

AIR アプリケーションは、ネットワーク接続が一定ではなく変化する環境で実行できます。アプリケーションでオンラインリソースに対する接続を管理できるように、Adobe AIR では、ネットワーク接続が使用できるようになったり使用できなくなったりするたびにネットワーク変更イベントが送信されます。ネットワーク変更イベントは、アプリケーションの NativeApplication オブジェクトから送出されます。このイベントに対処するには、リスナーを追加します。

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

さらに、イベントハンドラ関数を定義します。

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

Event.NETWORK_CHANGE イベントは、ネットワーク活動全体の変更ではなく、ネットワーク接続の変更のみを示します。AIR では、ネットワークが変更された意味については解釈されません。ネットワークに接続されたコンピュータには実際の接続や仮想接続が多数関係していることがあるため、接続が失われても必ずしもリソースが失われたことを意味するわけではありません。一方、新しい接続でも、リソースの可用性の向上が保証されるわけではありません。新しい接続によって、それまで使用できていたリソースへのアクセスがブロックされることもあります(例えば、VPN に接続する場合など)。

一般に、アプリケーションでリモートリソースに接続できるかどうかを確認するには、試してみるしかありません。そのために、air.net パッケージのサービス監視フレームワークにより、特定のホストに対するネットワーク接続の変更に AIR アプリケーションで応答できるイベントベースの方法が提供されています。

注意: サービス監視フレームワークでは、サーバで要求が受け入れられたかどうかが検出されます。これによって、完全に接続が確立されたことが保証されるわけではありません。拡張可能な Web サービスでは、多くの場合、キャッシュ装置や負荷分散装置を使用して、Web サーバのクラスタに対するトラフィックにリダイレクトしています。この場合、サービスプロバイダによって、ネットワーク接続の部分的な診断のみが提供されます。

サービス監視の基礎

サービス監視フレームワークは、AIR フレームワークとは別に機能します。HTML ベースの AIR アプリケーションでは、servicemonitor.swf が AIR アプリケーションパッケージに組み込まれている必要があります。また、servicemonitor.swf は、次のように AIR アプリケーションコードでも組み込まれている必要があります。

<script source="servicemonitor.swf" type="application/x-shockwave-flash"/>

servicemonitor.swf ファイルは、AIR SDK のフレームワークディレクトリに組み込まれます。

ServiceMonitor クラスでは、ネットワークサービスを監視するためのフレームワークを実装し、サービス監視の基本的な機能を提供します。デフォルトでは、ServiceMonitor クラスのインスタンスから、ネットワーク接続に関するイベントが送出されます。インスタンスが作成されたときや、ネットワーク変更が Adobe AIR で検出されるたびに、ServiceMonitor オブジェクトからこれらのイベントが送出されます。さらに、ServiceMonitor インスタンスの pollInterval プロパティを設定すると、通常のネットワーク接続イベントに関係なく、指定した間隔(ミリ秒)で接続を確認することができます。ServiceMonitor オブジェクトによるネットワーク接続の確認は、start() メソッドが呼び出されるまで実行されません。

URLMonitor クラスは ServiceMonitor クラスのサブクラスで、このクラスでは、特定の URLRequest に対する HTTP 接続の変更を検出します。

SocketMonitor クラスも ServiceMonitor クラスのサブクラスで、このクラスでは、特定のポートの特定のホストに対する接続の変更を検出します。

HTTP 接続の検出

URLMonitor クラスでは、HTTP 要求をポート 80(HTTP 通信の一般的なポート)で特定のアドレスに送信できるかどうかを確認します。次のコードでは、URLMonitor クラスのインスタンスを使用して、アドビ システムズ社の Web サイトに対する接続の変更を検出します。

<script src="servicemonitor.swf" type="application/x-shockwave-flash" /> 
 
<script> 
    var monitor; 
    function test() 
    { 
        monitor = new air.URLMonitor(new air.URLRequest('http://www.adobe.com')); 
        monitor.addEventListener(air.StatusEvent.STATUS, announceStatus); 
        monitor.start(); 
    } 
    function announceStatus(e) { 
        air.trace("Status change. Current status: " + monitor.available); 
    } 
</script>

ソケット接続の検出

AIR アプリケーションでは、プッシュモデルの接続にソケット接続を使用することもできます。セキュリティ上の理由から、許可されていないポートでのネットワーク通信は、ファイアウォールやネットワークルーターによって制限されるのが一般的です。そのため、開発者は、ユーザがソケット接続を実行できない可能性があることを考慮する必要があります。

URLMonitor の例と同様に、次のコードでは、SocketMonitor クラスのインスタンスを使用して、ポート 6667(IRC で一般に使用されるポート)のソケット接続に対する接続の変更を検出します。

<script src="servicemonitor.swf" type="application/x-shockwave-flash" /> 
 
<script> 
    function test() 
    { 
        socketMonitor = new air.SocketMonitor('www.adobe.com', 6667); 
        socketMonitor.addEventListener(air.StatusEvent.STATUS, socketStatusChange); 
        socketMonitor.start(); 
    } 
    function announceStatus(e) { 
        air.trace("Status change. Current status: " + socketMonitor.available); 
    } 
</script>