今天分享的是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下令的广播测试事件。

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

SSM-Netty实现软硬件通信,真实项目案例的更多相关文章

  1. SSM+Netty项目结合思路

    最近正忙于搬家,面试,整理团队开发计划等工作,所以没有什么时间登陆个人公众号,今天上线看到有粉丝想了解下Netty结合通用SSM框架的案例,由于公众号时间限制,我不能和此粉丝单独沟通,再此写一篇手记分 ...

  2. 15套java架构师、集群、高可用、高可扩展、高性能、高并发、性能优化、Spring boot、Redis、ActiveMQ、Nginx、Mycat、Netty、Jvm大型分布式项目实战视频教程

    * { font-family: "Microsoft YaHei" !important } h1 { color: #FF0 } 15套java架构师.集群.高可用.高可扩展. ...

  3. 为什么选择Netty作为基础通信框架?

    在开始之前,我先讲一个亲身经历的故事:曾经有两个项目组同时用到了NIO编程技术,一个项目组选择自己开发NIO服务端,直接使用JDK原生的API,结果两个多月过去了,他们的NIO服务端始终无法稳定,问题 ...

  4. OkGo3.0 --真实项目使用和二次封装(转)

    转载:https://blog.csdn.net/jiushiwo12340/article/details/79011480  11.OkGo3.0真实项目使用和二次封装: ====  11.OkG ...

  5. 常见的七种Hadoop和Spark项目案例

    常见的七种Hadoop和Spark项目案例 有一句古老的格言是这样说的,如果你向某人提供你的全部支持和金融支持去做一些不同的和创新的事情,他们最终却会做别人正在做的事情.如比较火爆的Hadoop.Sp ...

  6. Java算法之递归打破及在真实项目中的使用实例

    开心一笑 刚才领导问开发:"你觉得这个项目的最大风险是什么",开发说:"加班猝死" , 气氛尴尬了一分钟!!! 提出问题 1.递归算法简单复习 2.如何实现递归 ...

  7. Hadoop学习笔记—20.网站日志分析项目案例(一)项目介绍

    网站日志分析项目案例(一)项目介绍:当前页面 网站日志分析项目案例(二)数据清洗:http://www.cnblogs.com/edisonchou/p/4458219.html 网站日志分析项目案例 ...

  8. Hadoop学习笔记—20.网站日志分析项目案例(二)数据清洗

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:当前页面 网站日志分析项目案例 ...

  9. Hadoop学习笔记—20.网站日志分析项目案例(三)统计分析

    网站日志分析项目案例(一)项目介绍:http://www.cnblogs.com/edisonchou/p/4449082.html 网站日志分析项目案例(二)数据清洗:http://www.cnbl ...

随机推荐

  1. Il laser che è chiaramente visibile

    Prima di quel tempo ho ottenuto questo potente puntatore laser 500mW, non so davvero come questo dis ...

  2. [升级说明] Senparc.Weixin.MP v14.8.11 (微信群发接口调整)

    升级内容:添加根据标签群发接口,重构原根据分组群发接口  参考微信文档:https://mp.weixin.qq.com/wiki?t=resource/res_main&id=mp14811 ...

  3. Nerd的畅销产品

    感谢陈大先生花费时间一起细致地讨论这个课题,促成此文. <Nerd的套现ATM机>中已经谈到,对于nerd来讲最畅销的产品是“考试通过”.本文将继续这个话题的展开讨论,更深入细致地分析这个 ...

  4. 使用Nginx+Uwsgi部署Python Flask项目

    第一次用Flask做Web(也是第一次用Python做Web),在部署的时候遇到了不少问题,现在将过程就下来,供在这方面也有疑惑的人参考.(PS:使用Apache+mod_wsgi部署模式的可以参考另 ...

  5. Chart 图表开源项目总结

    在Android开发中,我们不免会遇到图表展示的需求,以下是本人之前star的悬浮窗的开源项目,供大家参考: 1. WilliamChart:创建图表的Android库 2. HelloCharts: ...

  6. Python面向对象6:抽象类和自定义类

    抽象类- 抽象方法: 没有具体实现内容的方法成为抽象方法- 抽象方法的主要意义是规范了子类的行为和接口- 抽象类的使用需要借助abc模块 import abc - 抽象类:包含抽象方法的类叫抽象类,通 ...

  7. 微信小程序开发用户授权登录

    用wx.login获取登录凭证code <!--pages/user/index.wxml--> <view hidden='{{boolean}}'> <view wx ...

  8. Static了解和复习继承。

    Static了解 static加在局部变量的前面改变其存储类型使之成为静态局部变量,会延长它的生存周期,但是不会改变其作用域. 静态成员是属于类的,而不是属于某个对象的.即便没有任何一个实例,类的静态 ...

  9. 工作随笔—integer对象比较

    问题:对于integer对象,当比较2==2的时候,返回的值是true还是false?当比较2000==2000的时候,返回的值是true还是false? 回答:当比较2==2的时候,返回的值是tru ...

  10. .Net #if DEBUG调试模式代码使用

    #if DEBUG      Console.WriteLine("DEBUG:11111111111"); #else       Console.WriteLine(" ...