SSM-Netty实现软硬件通讯,真实项目案例

今天分享的是Myself本身工做项目中的一个模块实例实现的思路还有流程,在这过程当中也是遇到了不少问题,能过顺利解决也是团队沟通的结果。前端

项目模拟背景:假设咱们有一个软件平台,咱们的线下产品是一些探测器(传感器)硬件,它们须要在必定范围下定时上传数据给服务器,并且服务器可能还须要对他们下达命令(针对单个),或者广播指令(针对所有),且多是在管理员的后台下令,也多是在用户的小程序(APP)等前端应用下令,这样咱们就须要一个双向,并发,异步的通讯模块,且产品量大,须要考虑到链接池的状态,因此就考虑到了线程的做用。对于链接的监听端口,最好只能一个。git

好,经过以上模拟场景,咱们在构建思路时,须要将主要的核心点给理解清楚: 一、单端口多链接 二、双向、并发、异步 三、下令、广播 四、数据对数据库的写操做 五、对连接的实例作安全排查 六、系统自保功能(不是全部人都能连接)web

整理了这几个点后,因为项目开始时选用了SSM的底层框架(后期迁移Spring Boot)因此须要考虑到最简易的模块化配置方式,在搜罗了几天的开源项目后,我决定使用Netty来帮助咱们解决这一问题。数据库

有关netty的项目,我相信你们能够在本公众号的项目列表看到,那也是猫叔在整合这个项目时,研究整理的笔记。小程序

接下来我直接进入主题,因为平时工做时间长(9小时,研究2小时)因此写技术分享时,可能不会全部点都细讲,有问题的朋友能够直接公众号留言,猫叔看到会第一时间回复你们的。安全

咱们先看看我画的项目架构图,算是一个流程吧。 输入图片说明恰如SSM也是运行在Tomcat容器的一个Server项目,我在web.xml添加了一个新的监听器,监听器将启动Netty的线程服务启动类,其将运行Netty的主配置类,BossGroup是处理链接进来的连接实例,WorkerGroup是工做运行的连接,咱们对业务的处理就放在TCPServerHandler里面,我对每一个实例作了惟一ID的存储,这样Service层能够经过ID获取到连接实例,而后进行下令或广播指令,同时TCPServerHandler也有数据库写的操做,这要针对不一样的指令头参数而言。服务器

输入图片说明

以上是咱们项目的目录,这是引入的关于netty的包。架构

有关于通讯的协议定义还有安全性,这个要看大家项目的业务或要求吧,咱们项目采用的是:帧头+ID+指令类型+指令内容+CRC16+帧尾 服务器和单片机那边都以这种协议作处理,保证了数据的安全性。 输入图片说明最后,我截图了测试服务器的日志,能够看到链接的实例ID 还有API下令的广播测试事件。并发

若是对你有所帮助,请点赞后再走吧。框架

相关文章
相关标签/搜索