tio-core-spring-boot-starter如何整合tio到springboot项目
发表于:2025-02-01 作者:千家信息网编辑
千家信息网最后更新 2025年02月01日,今天就跟大家聊聊有关tio-core-spring-boot-starter如何整合tio到springboot项目,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这
千家信息网最后更新 2025年02月01日tio-core-spring-boot-starter如何整合tio到springboot项目
今天就跟大家聊聊有关tio-core-spring-boot-starter如何整合tio到springboot项目,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
首先,你需要在 pom.xml 中引入 tio-core-spring-boot-starter
构件
org.t-io tio-core-spring-boot-starter 3.3.5.v20190712-RELEASE
编写服务端程序
一、给SpringBoot Application 主类添加 @EnableTioServerServer
注解
@SpringBootApplication@EnableTioServerServerpublic class TioServerApplication { public static void main(String[] args) { SpringApplication.run(TioServerApplication.class, args); }}
二、接下来,修改配置文件
tio: core: server: # websocket port default 9876 port: 6789 # 心跳时间 heartbeat-timeout: 60000 # 集群配置 默认关闭 cluster: enabled: false # 集群是通过redis的Pub/Sub实现,所以需要配置Redis redis: ip: 127.0.0.1 port: 6379 all: true group: true ip: true user: true # SSL 配置 ssl: enabled: false key-store: password: trust-store:
三、编写消息处理类
/** * 消息处理 handler, 通过加 {@link TioServerMsgHandler} 注解启用,否则不会启用 * 注意: handler 是必须要启用的,否则启动会抛出 {@link TioMsgHandlerNotFoundException} 异常 * * @author yangjian */@TioServerMsgHandlerpublic class HelloServerMsgHandler implements ServerAioHandler { /** * 解码:把接收到的ByteBuffer,解码成应用可以识别的业务消息包 * 总的消息结构:消息头 + 消息体 * 消息头结构: 4个字节,存储消息体的长度 * 消息体结构: 对象的json串的byte[] */ @Override public HelloPacket decode(ByteBuffer buffer, int limit, int position, int readableLength, ChannelContext channelContext) throws AioDecodeException { return PacketUtil.decode(buffer, limit, position, readableLength, channelContext); } /** * 编码:把业务消息包编码为可以发送的ByteBuffer * 总的消息结构:消息头 + 消息体 * 消息头结构: 4个字节,存储消息体的长度 * 消息体结构: 对象的json串的byte[] */ @Override public ByteBuffer encode(Packet packet, GroupContext groupContext, ChannelContext channelContext) { return PacketUtil.encode(packet, groupContext, channelContext); } /** * 处理消息 */ @Override public void handler(Packet packet, ChannelContext channelContext) throws Exception { HelloPacket helloPacket = (HelloPacket) packet; byte[] body = helloPacket.getBody(); if (body != null) { String str = new String(body, HelloPacket.CHARSET); System.out.println("收到消息:" + str); HelloPacket resppacket = new HelloPacket(); resppacket.setBody(("收到了你的消息,你的消息是:" + str).getBytes(HelloPacket.CHARSET)); Tio.send(channelContext, resppacket); } return; }}
四、实现消息实体包
/** * 消息包实体 * * @author yangjian */public class HelloPacket extends Packet { private static final long serialVersionUID = -172060606924066412L; public static final int HEADER_LENGTH = 4;//消息头的长度 public static final String CHARSET = "utf-8"; private byte[] body; /** * @return the body */ public byte[] getBody() { return body; } /** * @param body the body to set */ public void setBody(byte[] body) { this.body = body; }}
接下来启动服务端
编写客户端程序
客户端采用 Tio 的常规程序启动,只有三个文件,启动非常简单。
一、编写常量类
public interface Const { /** * 服务器地址 */ public static final String SERVER = "127.0.0.1"; /** * 监听端口 */ public static final int PORT = 6789; /** * 心跳超时时间 */ public static final int TIMEOUT = 5000;}
二、消息处理类
public class HelloClientAioHandler implements ClientAioHandler { private static HelloPacket heartbeatPacket = new HelloPacket(); /** * 解码:把接收到的ByteBuffer,解码成应用可以识别的业务消息包 * 总的消息结构:消息头 + 消息体 * 消息头结构: 4个字节,存储消息体的长度 * 消息体结构: 对象的json串的byte[] */ @Override public HelloPacket decode(ByteBuffer buffer, int limit, int position, int readableLength, ChannelContext channelContext) throws AioDecodeException { return PacketUtil.decode(buffer, limit, position, readableLength, channelContext); } /** * 编码:把业务消息包编码为可以发送的ByteBuffer * 总的消息结构:消息头 + 消息体 * 消息头结构: 4个字节,存储消息体的长度 * 消息体结构: 对象的json串的byte[] */ @Override public ByteBuffer encode(Packet packet, GroupContext groupContext, ChannelContext channelContext) { return PacketUtil.encode(packet, groupContext, channelContext); } /** * 处理消息 */ @Override public void handler(Packet packet, ChannelContext channelContext) throws Exception { HelloPacket helloPacket = (HelloPacket) packet; byte[] body = helloPacket.getBody(); if (body != null) { String str = new String(body, HelloPacket.CHARSET); System.out.println("收到消息:" + str); } return; } /** * 此方法如果返回null,框架层面则不会发心跳;如果返回非null,框架层面会定时发本方法返回的消息包 */ @Override public HelloPacket heartbeatPacket(ChannelContext channelContext) { return heartbeatPacket; }
三、客户端启动类
public class HelloClientStarter { //服务器节点 public static Node serverNode = new Node(Const.SERVER, Const.PORT); //handler, 包括编码、解码、消息处理 public static ClientAioHandler tioClientHandler = new HelloClientAioHandler(); //事件监听器,可以为null,但建议自己实现该接口,可以参考showcase了解些接口 public static ClientAioListener aioListener = null; //断链后自动连接的,不想自动连接请设为null private static ReconnConf reconnConf = new ReconnConf(5000L); //一组连接共用的上下文对象 public static ClientGroupContext clientGroupContext = new ClientGroupContext(tioClientHandler, aioListener, reconnConf); public static TioClient tioClient = null; public static ClientChannelContext clientChannelContext = null; /** * 启动程序入口 */ public static void main(String[] args) throws Exception { clientGroupContext.setHeartbeatTimeout(Const.TIMEOUT); tioClient = new TioClient(clientGroupContext); clientChannelContext = tioClient.connect(serverNode); //连上后,发条消息玩玩 send(); } private static void send() throws Exception { HelloPacket packet = new HelloPacket(); packet.setBody("hello world".getBytes(HelloPacket.CHARSET)); Tio.send(clientChannelContext, packet); }}
启动客户端端,查看终端输出。
服务端输出
原生回调接口支持
跟 handler 一样,其他原生回调接口的使用方法保持不变,只需要在对应的实现类上加上对应的注解就 OK 了。
//最主要的逻辑处理类,必须要写,否则抛异常public class HelloServerMsgHandler implements ServerAioHandler {}//可不写,通过加 @TioServerAioListener 注解启用,否则不会启用public class HelloServerAioListener implements ServerAioListener {}//可不写, 通过加 @TioServerGroupListener 注解启用,否则不会启用public class HelloServerGroupListener implements GroupListener{}//可不写,通过加 @link TioServerIpStatListener 注解启用,否则不会启用public class HelloServerIpStatListener implements IpStatListener {}
这里注意:每个对应的回调接口都需要通过添加注解手动启用,否则默认不启用,不会自动扫描
服务端主动推送
这个也非常简单,只需获取到 TioServerBootstrap
,其他都变得非常简单。
@RestControllerpublic class HelloController { static Logger logger = LoggerFactory.getLogger(HelloController.class); @Autowired private TioServerBootstrap bootstrap; @GetMapping("/") public String index() { return "Hello, tio-spring-boot-starter !!!"; } /** * 推送消息到客户端 * @throws Exception */ @GetMapping("/push") public String pushMessage() throws Exception { HelloPacket packet = new HelloPacket(); packet.setBody("This message is pushed by Tio Server.".getBytes(HelloPacket.CHARSET)); Tio.sendToAll(bootstrap.getServerGroupContext(), packet); logger.info("Push a message to client successfully"); return "Push a message to client successfully"; }}
客户端输出截图
SSL 支持
# SSL 配置 ssl: enabled: true key-store: key-store path password: password trust-store: trust-store path
集群支持
# 集群配置 默认关闭 cluster: enabled: false # 集群是通过redis的Pub/Sub实现,所以需要配置Redis redis: ip: 127.0.0.1 port: 6379 all: true group: true ip: true user: true
tio-core-spring-boot-starter 源码地址
https://github.com/tywo45/t-io/tree/master/src/zoo/spring-boot/tio-core/src/main/java/org/tio/core/starter
看完上述内容,你们对tio-core-spring-boot-starter如何整合tio到springboot项目有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注行业资讯频道,感谢大家的支持。
消息
结构
注解
处理
配置
客户
服务
客户端
对象
接口
编码
长度
集群
业务
字节
程序
存储
支持
可不
内容
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库从删库到跑路
网络安全典型算法
数据库ORG
韩天明的服务器叫什么名字
网络安全我们同行手抄报
杨纪文网络安全产业联盟
电脑从服务器端切出来
c股票的软件开发
淄博联想服务器销售电话
网络安全加密传输管理系统
mysql数据库数据清洗
天津软件开发解决方案应用
相机显示无法连接到服务器
创建数据数据库
服务器做raid教程
惠州联信网络技术
服务器2021出货量排名
遍历接收到的数据库
山东单招学校排名网络技术
数据库中except
软件开发基本步骤
二十一互联网科技
网络安全我们同行手抄报
广州戴尔霄龙服务器行情
便宜的国外服务器租用
网络安全法实施之日
查看每个数据库占的磁盘空间
销售实时数据库模型
网络安全电话是什么意思
石家庄课程分享软件开发