Apache mina框架是什么?
“Apache Mina是一个能够帮助用户开发高性能和高伸缩性网络应用程序的框架。它通过Java nio技术基于TCP/IP和UDP/IP协议提供了抽象的、事件驱动的、异步的API。
”
二、如何集成并使用mina框架
1.引入pom依赖
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.7</version>
</dependency>
2.IoHandler类,顾名思义即接收到消息的处理类
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
/**
* IoHandler 继承类
*
* @author chenyi
* date: create on 2019/5/19
*/
public class MyIoHandler implements IoHandler {
/**
* 当一个新客户端连接后触发此方法.
*/
@Override
public void sessionCreated(IoSession ioSession){
// To do
}
/**
* 当连接后打开时触发此方法,一般此方法与 sessionCreated 会被同时触发
*/
@Override
public void sessionOpened(IoSession ioSession){
// To do
System.out.println("server端IP:" + ioSession.getRemoteAddress().toString() + " 开启连接");
}
/**
* 当连接被关闭时触发
*/
@Override
public void sessionClosed(IoSession ioSession) throws Exception {
// To do
}
/**
* 当连接空闲时触发此方法.
*/
@Override
public void sessionIdle(IoSession ioSession, IdleStatus idleStatus){
// To do
}
/**
* 抛出异常未被捕获触发此方法
*/
@Override
public void exceptionCaught(IoSession ioSession, Throwable throwable){
// To do
}
/**
* 接收到客户端的请求信息触发此方法.
*/
@Override
public void messageReceived(IoSession ioSession, Object object) throws Exception {
// To do
}
/**
* 当信息已经传送给客户端后触发此方法.
*/
@Override
public void messageSent(IoSession ioSession, Object object){
// To do
}
}
3.mina配置类
import org.apache.mina.core.service.IoAcceptor;
import org.apache.mina.core.service.IoHandler;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.filter.codec.ProtocolCodecFilter;
import org.apache.mina.filter.codec.textline.TextLineCodecFactory;
import org.apache.mina.transport.socket.nio.NioSocketAcceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.net.InetSocketAddress;
/**
* 配置Socket
*/
@Configuration
public class MinaConfig {
/**
* 拦截器
*/
@Bean
public IoHandler ioHandlerG() {
return new MyIoHandler();
}
/**
* 端口号
*/
@Bean
public InetSocketAddress inetSocketAddress() {
return new InetSocketAddress(10000);//监听10000端口
}
@Bean
public IoAcceptor ioAcceptorG() throws Exception {
IoAcceptor acceptor = new NioSocketAcceptor();
// 增加编码过滤器,统一编码UTF-8
acceptor.getFilterChain().addLast("codec", new ProtocolCodecFilter(new TextLineCodecFactory()));//TextLineCodecFactory,接收一行消息.
// 设置服务端逻辑处理器
acceptor.setHandler(ioHandlerG());
// 设置读缓存大小
acceptor.getSessionConfig().setReadBufferSize(2048);
// 设置指定类型的空闲时间,空闲时间超过这个值将触发sessionIdle方法
acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 60);
// 绑定端口
acceptor.bind(inetSocketAddress());
return acceptor;
}
}
作者:chenyi406
来源链接:
https://blog.csdn.net/chenyi406/article/details/103019393