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);

 }

}

       

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章