minaの初心ノート


もっと読む
最近minaを研究されていますが、メモを書いてください.全部粗い内容です.もし全く分からないなら、読んでみてもいいです.
これはminaのウェブサイトをダウンロードするのです.
http://mina.apache.org/downloads.html
Binariesとsourcesをダウンロードした後に、工事を建てて、例を走ることができます.
まずスタートの例から始めましょう.
まずserverクラス、MinaTimeServerです.
ポートを定義します
private static final int PORT = 9123;
メール関数で、
ブロック以外の承認をオンにします.すなわちサーバです.
IoAcceptor acceptor = new NioSocketAcceptor();
filterを追加します.これはlogです.何も言いません.
acceptor.getFilterChain().addLast( "logger", new LoggingFilter() );
これはよく言ってもいいです.filterchainはfilterのチェーンです.これはcodecです.
つまり、復号用のTextLink CodeFactoryは、その中の一つであり、つまり、各ラインごとに復号化される.
acceptor.getFilterChain().addLast( "codec", new ProtocolCodecFilter( new TextLineCodecFactory( Charset.forName( "UTF-8" ))));
以下はsetのハンドルです.つまり、clientから入ってきたデータをどう解決しますか?
acceptor.setHandler( new TimeServerHandler() );
これは≒ioの中のブザーです.
acceptor.getSessionConfig().setReadBufferSize( 2048 );
IDを設定します.10は10秒です.
acceptor.getSessionConfig().setIdleTime( IdleStatus.BOTH_IDLE, 10 );
最後に縛ります.okです.
acceptor.bind( new InetSocketAddress(PORT) );
TimeServer Handler類extensはIoHandler Adapterを作っています.IoHandler Adapterはいくつかの空虚な実装しかありません.またF 3からIoHandlerインターフェースまで、多くの方法があります.名前でも分かりやすいです.
session Created、sessionを創立します.
session Openedでsessionを開く.
session Closeed、sessionを閉じます.
sessionIdle、sessionアイドル.
exceptionCaugt、異常を捕らえる.
メッセージReceived、情報を受け取る.
メッセージを送ります.
その中で一番よく使われているのはいくつかです.
    @Override
    public void exceptionCaught( IoSession session, Throwable cause ) throws Exception
    {
        cause.printStackTrace();
    }
   @Override
    public void messageReceived( IoSession session, Object message ) throws Exception
    {
        System.out.println(message.getClass());
        String str = message.toString();
        
        if( str.trim().equalsIgnoreCase("quit") ) {
            // "Quit" ? let's get out ...
            session.close(true);
            return;
        }

        // Send the current date back to the client
        Date date = new Date();
        session.write( date.toString() );
        System.out.println("Message written...");
    }
   @Override
    public void sessionIdle( IoSession session, IdleStatus status ) throws Exception
    {
        System.out.println( "IDLE " + session.getIdleCount( status ));
    }
この三つです
message Receivedメソッドの二つのパラメータは、IoSession sessionがsessionです.Object messageはclientからの情報です.
System.out.println(message.getClass());
String型が発見されるのは、codecが使われているからです.さもないと戻ってくるのはIoBufferです.
後ろのsession.write()ユーザーに返す値です.
その後のsessionIdleというのは、sessionで遊んでいる間にすることです.
次にechoserverという例を見ます.mainは最も簡単な例とほぼ同じです.
しかし
acceptor.getStatistics().getReadBytesThroughput()
この方法は何をするか分かりません.いつもコンソールから出力されるので、嫌です.また、何を入力してもこの値は変わらないので、いつも0.0です.牛人の説明を期待しています.
ハンドルには
    
    @Override
    public void sessionCreated(IoSession session) {
        session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);

        // We're going to use SSL negotiation notification.
        session.setAttribute(SslFilter.USE_NOTIFICATION);
    }
前の例にメールに書いたものをいくつか設置しました.このように書いたらもっと専門的です.

    @Override
    public void messageReceived(IoSession session, Object message)
            throws Exception {
        LOGGER.info( "Received : " + message );
        // Write the received data back to remote peer
        session.write(((IoBuffer) message).duplicate());
    }
ここでは、文字を入力する理由を明らかにします.出力は確かに2つです.