zoukankan      html  css  js  c++  java
  • SSM-Netty实现软硬件通信,真实项目案例

    今天分享的是Myself自己工作项目中的一个模块实例实现的思路还有流程,在这过程中也是遇到了很多问题,能过顺利解决也是团队沟通的结果。

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

    好,通过以上模拟场景,我们在构建思路时,需要将主要的核心点给理解清楚: 1、单端口多连接 2、双向、并发、异步 3、下令、广播 4、数据对数据库的写操作 5、对链接的实例做安全排查 6、系统自保功能(不是所有人都能链接)

    整理了这几个点后,由于项目开始时选用了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下令的广播测试事件。

    如果对你有所帮助,请点赞后再走吧。

  • 相关阅读:
    windows7设置开机启动方式
    [转载]深入理解HTTP Session
    接口测试面试题汇总
    Fiddler相关面试题整理
    Centos7安装PHP、MySQL、apache
    使用python操作mysql数据库
    一键卸载宝塔Linux面板及运行环境命令
    ERROR 1130: Host '192.168.1.3' is not allowed to connect to this MySQL ERROR 1062 (23000): Duplicate entry '%-root' for key 'PRIMARY'
    Linux下Redis的安装和部署
    linux docker篇 (一键安装、部署、使用)
  • 原文地址:https://www.cnblogs.com/UncleCatMySelf/p/9190645.html
Copyright © 2011-2022 走看看