mina mysql_SpringBoot集成Socket通讯之Mina框架

环境:JDK1.8   WIN10

集成:SpringBoot+Mybatis+Mina+MySql

开发工具eclipse Neon.3 Release (4.6.3)

目录如下

Mina包中的ServerHandler里有所有的事件

在spring boot启动类中添加打开端口的方法

Util工具包中放了几个常用的进制转换、CRC校验、Unicode转换

ServerHandler中调用其他service需要使用特殊方法,类中已经注明流程

总结来说就三个步骤

1.在pom.xml中添加两个jar包 Mina和Socket

org.springframework

spring-websocket

4.0.1.RELEASE

org.apache.mina

mina-core

2.0.2

2.在SpringBoot启动类Application中增加启动方法

@Bean

public IoAcceptor ioAcceptor() throws Exception {

IoAcceptor acceptor=new NioSocketAcceptor();

acceptor.setHandler(new ServerHandler());

acceptor.getSessionConfig().setReadBufferSize(1024);

acceptor.getSessionConfig().setIdleTime(IdleStatus.BOTH_IDLE, 100);

acceptor.bind(new InetSocketAddress(PORT));

System.out.println("服务器在端口:" + PORT + "已经启动");

return acceptor;

}

3.创建Mina事件类ServerHandler

package cn.yiyuan.Mina;

import javax.annotation.PostConstruct;

import org.apache.mina.core.buffer.IoBuffer;

import org.apache.mina.core.service.IoHandlerAdapter;

import org.apache.mina.core.session.IdleStatus;

import org.apache.mina.core.session.IoSession;

import org.apache.mina.transport.socket.SocketSessionConfig;

import org.slf4j.Logger;

import org.slf4j.LoggerFactory;

import org.springframework.stereotype.Component;

import cn.yiyuan.Util.HexUtil;

@Component

public class ServerHandler extends IoHandlerAdapter {

private Logger logger = LoggerFactory.getLogger(this.getClass());

/* 在本类中调用其他service需要使用以下方法

*

* */

//1.声明service类

/*@Autowired

private TbBoxService tbBoxService;*/

private static ServerHandler serverHandler ;

//2通过@PostConstruct实现初始化bean之前进行的操作

@PostConstruct

public void init() {

serverHandler = this;

//serverHandler.tbBoxService = this.tbBoxService;.

//3.调用时需要加前缀 如 serverHandler.tbBoxService

}

@Override

public void sessionCreated(IoSession session) throws Exception { //用户连接到服务器

SocketSessionConfig cfg = (SocketSessionConfig) session.getConfig();

cfg.setSoLinger(0);

logger.info("[服务建立]" + session.getId());

}

@Override

public void messageReceived(IoSession session, Object message)throws Exception {//接收消息

IoBuffer bbuf = (IoBuffer) message;

byte[] byten = new byte[bbuf.limit()];

bbuf.get(byten, bbuf.position(), bbuf.limit());

String temp=HexUtil.bytes2HexString(byten);

temp = temp.trim();

logger.info("[收到消息]" + temp);

}

@Override

public void sessionClosed(IoSession session) throws Exception { //用户从服务器断开

logger.info("[服务断开]" + session.getId());

}

@Override

public void messageSent(IoSession session, Object message){ //发送消息结束

//logger.info("[发送消息结束]" + session.getId() + "message" + message);

}

@Override

public void sessionIdle(IoSession session, IdleStatus status)throws Exception {//重连

logger.info("[服务重连]" + session.getId() + "status" + status.toString());

}

@Override

public void exceptionCaught(IoSession session, Throwable cause)throws Exception {//连接发生异常

cause.printStackTrace();

logger.info("[服务异常]" + session.getId());

}

}

然后直接启动项目,客户端通过IP:端口即可连接服务端

以上项目均为本人为写项目整合的网上已有资源,希望可以帮助到大家,同时感谢开源作者

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值