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

 }

}

       

猜你喜欢

转载自blog.csdn.net/xinsuiqingfeng/article/details/81090056
今日推荐