package org.jeecg.modules.dry.socket; import lombok.extern.slf4j.Slf4j; 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.filter.logging.LoggingFilter; import org.apache.mina.transport.socket.nio.NioSocketAcceptor; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import java.net.InetSocketAddress; import java.nio.charset.Charset; @Slf4j @Configuration public class MinaConfig { // socket占用端口 @Value("${mina.port}") private int port; /** 15秒发送一次心跳包 */ private static final int HEARTBEATRATE = 15; @Bean public LoggingFilter loggingFilter() { return new LoggingFilter(); } @Bean public IoHandler ioHandler() { return new ServerHandler(); } @Bean public InetSocketAddress inetSocketAddress() { return new InetSocketAddress(port); } @Bean public IoAcceptor ioAcceptor() throws Exception { IoAcceptor acceptor = new NioSocketAcceptor(); acceptor.getFilterChain().addLast("logger", loggingFilter()); acceptor.getFilterChain().addLast("coderc", // 使用自定义编码解码工厂类 new ProtocolCodecFilter(new TextLineCodecFactory(Charset.forName("UTF-8"))));//设置编码过滤器 acceptor.getSessionConfig().setReadBufferSize(1024*1024);//设置缓冲区 acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10); //配置会话信息 acceptor.setHandler(ioHandler()); //自定义处理业务的代码:自定义的类 acceptor.bind(inetSocketAddress());//绑定端口号 log.info("Socket服务器在端口:" + port + "已经启动"); return acceptor; } }