什么事mina?
mina是基于nio开发出来的一个无阻塞高性能通信框架,能够处理socket无法解决的高并发问题。
mina的下载
.将下载好的压缩包进行解压,将dist文件夹下的mina-core-2.0.14.jar文件和lib文件下slf4j-api-1.7.21.jar文件导入到你的web项目中
package com.example.server;
import java.io.IOException;
import java.net.InetSocketAddress;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
public class MinaServer {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
//第一步 创建一个NioSocketAcceptor 对象
NioSocketAcceptor acceptor=new NioSocketAcceptor();
//第二步设置handler
acceptor.setHandler(new MyServerHandler());
//第三步,获取拦截器,发来的消息都需要通过拦截器拦截之后才能接收到
//添加一个拦截器对数据进行加解码TextLineCodecFactory()
acceptor.getFilterChain().addLast("codeFilter"
,new ProtocolCodecFilter(new TextLineCodecFactory()));;
//第四步,绑定端口号
acceptor.bind(new InetSocketAddress(9898));
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
handler对象
package com.example.server;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
public class MyServerHandler extends IoHandlerAdapter {
//异常的处理
@Override
public void exceptionCaught(IoSession session, Throwable cause)
throws Exception {
// TODO Auto-generated method stub
super.exceptionCaught(session, cause);
System.out.println("exceptionCaught");
}
@Override
public void inputClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.inputClosed(session);
}
@Override
public void messageReceived(IoSession session, Object message)
throws Exception {
// TODO Auto-generated method stub
super.messageReceived(session, message);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
// TODO Auto-generated method stub
super.messageSent(session, message);
}
@Override
public void sessionClosed(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionClosed(session);
}
@Override
public void sessionCreated(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionCreated(session);
}
// 这个方法是在服务器空闲状态的时候调用的
@Override
public void sessionIdle(IoSession session, IdleStatus status)
throws Exception {
// TODO Auto-generated method stub
super.sessionIdle(session, status);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
// TODO Auto-generated method stub
super.sessionOpened(session);
}
}
以上的代码基本上就可以代替原生的socket服务器端的写法了,至于接收端的用法可以用socket实现也可以用其他的方式实现