最近项目用到mina,所以自学了一下。趁热打铁看,记一下。mina其实我自己理解就是一个网络层的框架。他对原有的socket进行了封装,变得更加灵活,在我看来变得更加方便。最重要的是:他是异步通信的。也就是说他不会存在因为等待要接收的消息而损失资源。下面是写的服务器端的代码(PORT=9080自己定义的):
IoAcceptor acceptor = new NioSocketAcceptor();//建立接收端 也就是所謂的server端
MinaHandler mh = new MinaHandler();
DefaultIoFilterChainBuilder chain = acceptor.getFilterChain();
chain.addLast("logger", new LoggingFilter());//加入一个日志过滤器,记录日志
chain.addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"))));//加入编码格式过滤器,设定为utf-8
IoSessionConfig dcfg = acceptor.getSessionConfig();//定义session的设置
dcfg.setReadBufferSize(2048);//临时读取的缓冲区大小 我是这么理解的
acceptor.setHandler(mh);//设定业务处理的对象 大概可以这么理解 不是很准确
acceptor.bind(new InetSocketAddress(PORT));//选择要监控的服务器 因为不监控也就没有触发方法这么一说了
然后是客户端:
IoConnector connector = new NioSocketConnector();//建立連接端
DefaultIoFilterChainBuilder chain = connector.getFilterChain();
chain.addLast("logger", new LoggingFilter());//加入一个日志过滤器,记录日志
chain.addLast("codec", new ProtocolCodecFilter(
new TextLineCodecFactory(Charset.forName("UTF-8"))));//加入编码格式过滤器,设定为utf-8
ClientHandler ch = new ClientHandler();//自己定义的类 实现八种方法。
connector.setHandler(ch);//设定业务处理的对象 大概可以这么理解 不是很准确
ConnectFuture connFuture = connector.connect(new InetSocketAddress(
"localhost", 9089));//链接服务器
connFuture.awaitUninterruptibly();//线程等待,直到被唤醒
IoSession session = connFuture.getSession();
session.write("dddddd");//发送需要发送的内容
session.getCloseFuture().awaitUninterruptibly();
connector.dispose();