当前位置:
首页 >
Java NIO框架Mina
发布时间:2024/4/15
45
豆豆
生活随笔
收集整理的这篇文章主要介绍了
Java NIO框架Mina
小编觉得挺不错的,现在分享给大家,帮大家做个参考.
2019独角兽企业重金招聘Python工程师标准>>>
真羡慕java有系列的懒人框架,虽然c也有Netty, ACE等高速网络框架,但是语言的特性,决定了java框架之间更好集成,更加廉价。
上一个我的测试代码:
/*** */ package com.jinbao.MinaDemo;import java.io.IOException; import java.net.InetSocketAddress; import java.nio.charset.Charset;import org.apache.mina.core.service.IoAcceptor; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketAcceptor;/*** @author zhuji06**/ public class MinaService extends IoHandlerAdapter {//有消息到达时会调用此方法@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("Server Received : " + message);session.write("Im Server [" + System.currentTimeMillis() + "]");}//有消息即发送出去时会调用此方法@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("Server Sent : " + message);}public static void main(String[] args) throws IOException {//1 创建服务端借口实例,服务端就是acceptor(貌似MINA3会改)IoAcceptor acceptor = new NioSocketAcceptor();//2 设置IoHandler,handler是处于上层的其直接对应逻辑处理acceptor.setHandler(new MinaService());//3 添加消息过滤器acceptor.getFilterChain().addLast("decode", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//4 设置session缓存大小//5 设置连接空闲时间单位秒//6 开始监听acceptor.bind(new InetSocketAddress("localhost", 9696));} }客户端:
/*** */ package com.jinbao.MinaDemo;import java.net.InetSocketAddress; import java.nio.charset.Charset;import org.apache.mina.core.future.ConnectFuture; import org.apache.mina.core.service.IoConnector; import org.apache.mina.core.service.IoHandler; import org.apache.mina.core.service.IoHandlerAdapter; import org.apache.mina.core.session.IoSession; import org.apache.mina.filter.codec.ProtocolCodecFilter; import org.apache.mina.filter.codec.textline.TextLineCodecFactory; import org.apache.mina.transport.socket.nio.NioSocketConnector;/*** @author zhuji06**/ public class MinaClient extends IoHandlerAdapter {public static boolean received = false;@Overridepublic void messageReceived(IoSession session, Object message) throws Exception {System.out.println("Client Received : " + message);received = true;}@Overridepublic void messageSent(IoSession session, Object message) throws Exception {System.out.println("Client Sent : " + message);}public static void main(String[] args) {//1 客户端实例对应的接口是IoConnectorIoConnector connector = new NioSocketConnector();//2 handlerIoHandler handler = new MinaClient();connector.setHandler(handler);//3 添加消息过滤器connector.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//4 开始连接服务器端//这里和服务器端编码有所不同,由于MINA采用非阻塞模式,//所以客户端连接服务端是非阻塞的,即connect()方法调用后执行线程会立即执行下面的代码。//但connect()会返回一个ConnectFuture对象,使用它可以判断是否已经建立连接ConnectFuture future = connector.connect(new InetSocketAddress("localhost", 9696));//5 等待直到连接建立future.awaitUninterruptibly();//6 得到sessionIoSession session = future.getSession();//7 session.write()将一个对象发送出去,至于对象如何变成二进制那是编码解码器干的事情,后面会介绍的session.write("Hello! i`m Client");//等待服务器回馈的消息while (!received) {//消息还没来我就一直睡!睡啊睡!try {Thread.sleep(2);} catch (InterruptedException e) {e.printStackTrace();}}//8 关闭客户端连接connector.dispose(true);}}转载于:https://my.oschina.net/zhujinbao/blog/220729
总结
以上是生活随笔为你收集整理的Java NIO框架Mina的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: MySQL(MariaDB)之参数详解(
- 下一篇: JavaMail发送简单邮件