spring boot使用mina需要的依赖:
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-core</artifactId>
<version>2.0.13</version>
</dependency>
<dependency>
<groupId>org.apache.mina</groupId>
<artifactId>mina-integration-beans</artifactId>
<version>2.1.3</version>
</dependency>
minaconfig:
import com.jit.iot.config.socket.ServerHandler;
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 static com.jit.iot.IotApplication.logger;
import java.net.InetSocketAddress;
import java.nio.charset.Charset;
@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());//绑定端口号
logger.info("Socket服务器在端口:" + port + "已经启动");
return acceptor;
}
}
ServerHandler:
import com.jit.iot.service.GatewayService;
import org.apache.mina.core.service.IoHandlerAdapter;
import org.apache.mina.core.session.IdleStatus;
import org.apache.mina.core.session.IoSession;
import javax.annotation.Resource;
import static com.jit.iot.IotApplication.*;
public class ServerHandler extends IoHandlerAdapter {
@Override
public void exceptionCaught(IoSession session, Throwable cause) throws Exception {
logger.error("出现异常 :" + session.getRemoteAddress().toString() + " : " + cause.toString());
session.closeNow();
}
@Override
public void sessionCreated(IoSession session) throws Exception {
logger.info("连接创建 : " + session.getRemoteAddress().toString());
session.getConfig().setIdleTime(IdleStatus.BOTH_IDLE, 10);
}
@Override
public void sessionOpened(IoSession session) throws Exception {
System.out.println(session);
logger.info("连接打开: " + session.getRemoteAddress().toString());
}
@Override
public void messageReceived(IoSession session, Object message) throws Exception {
logger.info("接受到数据 :" + message);
}
@Override
public void messageSent(IoSession session, Object message) throws Exception {
logger.info("返回消息内容 : " + message.toString());
}
@Override
public void sessionIdle(IoSession session, IdleStatus status) throws Exception {
if (status == IdleStatus.READER_IDLE) {
//logger.info("进入读空闲状态");
//session.closeNow();
} else if (status == IdleStatus.BOTH_IDLE) {
// logger.info("BOTH空闲");
//session.closeNow();
}
}
@Override
public void sessionClosed(IoSession session) throws Exception {
String address = session.getRemoteAddress().toString().replace("/", "");
logger.info(address + " 会话关闭了!");
}
}
刚开始学习java;同时练习写博客,基本都直接上代码!