1. 程式人生 > >Mina框架及介面開發

Mina框架及介面開發

      Mina是NIO實現的一個架構,可以通過它快速開發網路通訊,中介軟體等服務端程式。

IOService介面:描述服務端和客戶端介面,子類是connector和Acceptor分別用於描述客戶端和服務端。

IOproceser 多執行緒環境來處理我們的連線請求流程,ioFilter提供資料的過濾工作,包括編解碼,日誌等資訊過濾。

Handler就是我們的業務物件,自定義Handler需實現IOHandlerAcceptor。

IOsession描述的是客戶端和服務端連線的描述,常用於描述傳送和接收資料。

總結:客戶端流程 IOconnector->IOProcessor->IOFilter->Handler

           服務端流程 IOAcceptor->IOProcessor->IOFilter->Handler

server端:

package com.zjl.demo.mina;

import java.net.InetSocketAddress;

import org.apache.mina.core.filterchain.DefaultIoFilterChainBuilder;

import org.apache.mina.filter.codec.ProtocolCodecFilter;

import org.apache.mina.filter.codec.textline.TextLineCodecFactory;

import org.apache.mina.transport.socket.SocketAcceptor;

import org.apache.mina.transport.socket.nio.NioSocketAcceptor;

public class MinaServer {

  public void init( ) thows Exception {

         SocketAcceptor acceptor = new NioSocketAcceptor(Runtime.getRuntime( ).availableProcessors( ) +1);

       DefaultIofilterChainBuilder chain = acceptor.getFilterChain( );

       chain.addLast("codec",new ProtocolCodecFilter(

                     new TextLineCodecFactory( )));

     acceptor.setHandler(new MinaServerHandler( ) );

     acceptor.bind(new InetSocketAddress(8300));

     System.out.printIn("繫結埠8300");

}

    public MinaServer( ) throws Exception {

    init( );

}

    public static void main(String[ ] args) throws Exception {

            new MinaServer( );

           System.out.printIn(Mina伺服器開啟“);

   }

}

服務端訊息處理類:

package com.zjl.demo.mina;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IdleStatus;

 import org.apache.mina.core.session.IoSession;

 public class MinaServerHanlder extens IoHandlerAdapter {

   @Override

 public void messageReceived(IoSession session, Object message)

    thows Exception {

         session.write("服務端傳送訊息”+message);

         session.write("quite");

}

   @Override

   public void exceptionCaught (IoSession session,Throwable cause)

               throws Exception {

        if(session.isConnected( ))  {

            session.close(true);

   }

}

   @Override

  public void exceptionCaught(IoSession session,Throwable cause)

    throws Exception {

  if(session.isConnected) {

     session.close(true);

    }

}

   @Override

  public void messageSent(IoSession session, Object message) throws Exception {

       System.out.printIn("服務端收到訊息“ + message.toString( ));

}

  @Override

 public void sessionClosed(IoSession session) throws Exception {

         super.sessionClosded(session);

         System.out.printIn("sessionCLosed");

}

   @Override

   public void sessionCreated(IoSession session) throws Exception {

            session.getConfig( ).setIdleTime(IdleStatus.BOTH_IDLE,30000);

}

    @Override

   public void sessionIdle(IoSession session, IdleStatus status)

            throws Exception {

           session.close(true);

}

  @Override

  public void sessionOpened(IoSession session) throws Exception {

     super.sessionOpened(session);

 }

}