Minaの基本的な使用とよく使われるクラスの紹介

3873 ワード

詳細
MinaのフルネームはMultipurpose Infrastructure for Network Applicationsで、高性能で高可用性のネットワークアプリケーションを開発するための基礎フレームワークです.
Minaフレームワークを使用することで、下位I/Oやスレッドの同時処理などの複雑な作業を省くことができ、開発者はビジネス設計や開発にもっと力を入れることができます.
フレームワークでは、次のクラスがよく使用されます.
NioSocketAcceptorクラスは、サービス・エンド・リスニングを作成するために使用されます.NioSocketConnectorクラスはクライアント接続を作成するために使用されます.IoSessionクラスは、セッションのプロパティを保存し、メッセージを送信するために使用されます.IoHandlerAdapterクラスは、ビジネスロジックを定義するために使用されます.

	public static void main(String[] args) throws Exception {
		int PORT = 6789;
	    IoAcceptor acceptor = new NioSocketAcceptor();  
	    //   filter   
	   acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );  
	   acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));  
	    //             
	    acceptor.setHandler( new TimeServerHandler() );  // TimeServerHandler    org.apache.mina.example.gettingstarted.timeserver 
	    //        
	    acceptor.getSessionConfig().setReadBufferSize( 2048 );  
	    acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );  
	    //  Acceptor           
	    acceptor.bind( new InetSocketAddress(PORT) );  
	}

プログラム実行後、telnetで6789ポートに接続し、TimeServerHandlerクラスの機能をテストできます.
基本的な流れは次のとおりです.
User -> IoService -> IoProcessor -> IoFilter -> IoFilter -> IoHandler
オブジェクト
フレームコアインタフェースの簡単な説明は、次のとおりです.
org.apache.mina.core.service.IoServiceインタフェース:
IoAcceptorとIoConnectorの親インタフェースであり、フレームワークのすべての機能の総インタフェースです.
実装クラスAbstractIoServiceがあり、イベントを処理するためにExecutorがあり、AtomicIntegerがIDの一意性を確保しています.
org.apache.mina.core.service.IoAcceptorインタフェース:
IPとポートをバインドし、クライアントの接続要求を受信すると同時に、対応するイベントがIoHandlerに処理されます.
AbstractIoAcceptorは、AbstractIoServiceクラスを継承する基本的な機能の実装クラスです.
AbstractIoAcceptorには、セッションとサーバ側のsocket接続をポーリングするサブクラスAbstractPollingIoAcceptorがあります.
上記のNioSocketAcceptorクラスはAbstractPollingIoAcceptorのサブクラスです.
AbstractIoAcceptorには、データメッセージの転送を処理するサブクラスAbstractPollingConnectionsIoAcceptorがあります.
org.apache.mina.core.service.IoConnectorインタフェース:
サーバが指定したIPとポートを接続し、クライアントの接続要求を送信すると同時に、対応するイベントがIoHandlerに処理されます.
AbstractIoConnectorは、AbstractIoServiceクラスを継承する基本的な機能の実装クラスです.
AbstractIoConnectorには、セッションとクライアントsocket接続をポーリングするサブクラスAbstractPollingIoConnectorがあります.
上記のNioSocketConnectorクラスはAbstractPollingIoConnectorのサブクラスです.
org.apache.mina.core.service.IoProcessorインタフェース:
実際のIO操作を担当しています.
実装クラスSimpleIoProcessorPoolがあり、特定のセッションを管理します.
クラスAbstractPollingIoProcessorを実装し、ポーリングする方法のIO操作があります.
org.apache.mina.core.service.IoHandlerインタフェース:
フレームワークによってトリガーされたすべてのイベントの処理を担当します.これらのイベントはIoProcessorから送信され、同じIoProcessorが複数のセッションの処理を担当します.
デフォルトの実装クラスIoHandlerAdapterがあり、アダプタモードで簡単にカプセル化されています.
org.apache.mina.core.service.IoServiceListenerインタフェース:
javaを継承します.util.EventListenerインタフェースは、IoService関連イベントの傍受を担当します.
これに関連してIoServiceListenerSupportというクラスがあり、IoServiceと対応するリスナーを統合して使いやすいようにしています.
org.apache.mina.core.session.IoSessionインタフェース:
これは、最下位の伝送タイプに関係なく、通信両端の接続を表します.
org.apache.mina.core.session.IoSessionConfigインタフェース:
リード・バッファ・サイズ、セッション・データ・スループット、計算スループット間隔、指定したセッション側の空き時間、書き込み要求のタイムアウト時間など、セッションの構成情報を表します.
org.apache.mina.core.session.IoSessionInitializerインタフェース:
AbstractIoServiceクラスのinitSessionメソッドをパラメータとして使用できるコールバック関数を定義します.
org.apache.mina.core.session.IoSessionRecyclerインタフェース:
使用されなくなったセッションの回収を担当します.
タイムアウトしたセッションを回収する実装クラスExpiringSessionRecyclerがあります.
org.apache.mina.core.session.IoEventクラス:
Runnableインタフェースを実装し、イベントタイプに応じてセッションのフィルタチェーン上のリスナーに信号を送信するイベントまたはリクエストを表します.
org.apache.mina.core.session.IoEventType列挙:
イベントのタイプを定義します.
以上は下位構造の説明にすぎず,実装メカニズムは上位の特定のクラスの呼び出しから解析する必要がある.