资讯专栏INFORMATION COLUMN

【Java猫说】SSM整合Netty5.0详细说明

dingding199389 / 3157人阅读

摘要:而我们项目在实测时也是将项目发布到测试服务器,通过模拟工具进行测试连接,当数据格式正常,且业务数据正常,服务器就会对指令执行对应的操作。

阅读本文约“5.5分钟”

最近又有粉丝加Q群讨论netty整合SSM项目的方式等,我在这里抽了休息日的时候整理一下,一步一步的记录,注意的是,本案例仅实现了用netty整合SSM后与单片机等类TCP应用通信。

SSM + Netty项目结合思路

对于Netty大致觉得是迈向中级开发的必备通信框架,它是轻量级的,且其架构的演进也是相当的出色。对于更多的Netty基础知识我也在去年开发中做了记录,大家可以阅历公众号历史查看Netty相关技术知识,案例项目是我主导开发的上一个大型项目,类似共享充电宝的共享应用,同样主体是小程序,而其中硬件中,嵌入式选用单片机作为主体开发,我则在IOT与Netty中纠结,最后选用Netty也是大部分通信架构都是基于Netty进行重构设计的,类似京东内部应用通信架构也是Netty为基础。

Netty与传统的通信架构不一样,它采用了双层概念,这是我自己身实现都的一种白话型理解,两个工作流或容器(ChannelGroup)一个来处理连接实例,一个来处理正在连接通信。

使用Netty我的容器可以仅开启监听一个端口,之后的连接通信均交给Netty来实现,当然通信的数据格式也要统一,帧头、帧尾、加密(项目采用CRC16)等等。

以上是真实项目的netty包下的目录截图,一些基本工具类是为了解密与双向通信发送的实现,由于单片机使用TCP,所以我们要自定义一个TCP的Handler,加入Netty的handler链中,心跳机制就多说了,主要还有Db层,这是用于在接收到数据,立即进行数据库的读写操作,由于项目本身使用MyBatis作为数据的持久层,但是在Handler中并不能很好的处理,所以我使用了原生的数据库连接,并在数据通信的不同类型中,使用线程来执行数据库操作。


如上图的示例,还有就是链接对象的唯一性,channelId与channel本身的对应要做好处理,我使用了全局的map来收集,并做了防护机制,同一channel示例,如果链接成功后,出现不一致的channelId发送信息时,系统会自动断开此危险链接。

对于netty的使用还不是很深入,还需要更多的反复推敲。

项目以放置github,接下来的文档代码块均用截图表示,大家可以去github查看具体的代码资料

UncleCatMySelf/ssmnetty

首先我用IDEA进行项目的初始化

接下初始化对应的pom文件还有配置文件

主要还是版本问题,其他版本我还没试过,所以坑的话,大家还要继续踩踩。

主要是netty中连接池对数据的处理,是在线程中执行的,Spring框架注入的Service组件存在失效的问题,我使用了大部分办法还是无法处理,最后就直接用原生的mybatis方式进行数据操作,所以congif文档是针对netty操作数据库而特别准备的配置文件。mappers可以时mybatis自动生成,也可以是自己写的xml文件。

本项目的mybatis集成Spring也是完好的,静静netty的数据操作需要再定义一层数据持续化池。

项目通过引入netty5.0,通过监听器形式,启动netty线程(NettyServerThread),于后启动对应的NettyServer,其中启动永久监听还有定义自己的TCPServerhandler,在数据读取方法中,重新定义自己的业务处理。 在接收成功,数据格式正常的情况下,执行对应的数据层操作,且每一个实例连接进来时,系统内存会对其进行ID与实例的绑定与存储,也因此方便Controller层对其链接实例进行查询信息与下发指令。

相关目录介绍均以放置Github上了哟。

地址:UncleCatMySelf/ssmnetty

没错就是 UncleCatMySelf ,本人地址下最新的项目。

接下来我们来看看项目的实测调试效果吧,我们需要运行CRC16跑出对应通信格式的密文,然后再由TCPIPMyself去执行,当然首先是运行起我们的项目。


服务器接收成功后也会执行相应的任务,这里第一次执行错误,是因为业务上,这条ID是在数据库里面不存在的,所以更新失败。


而我们项目在实测时也是将项目发布到测试服务器,通过TCP模拟工具进行测试连接,当数据格式正常,且业务数据正常,服务器就会对指令执行对应的操作。


我们再看看API方面的问题,当实例连接正常时,暴露出来的nettyAPI应该就是没问题的。不信?我们来看看效果怎么样



确实是没问题的,不过本项目还是应该还有部分坑存在,再次将源码分享给大家,希望大家一起踩坑,且本人平时较忙所以相关项目的代码维护也是有时间才弄的,毕竟最近在准备(软考中级的设计师,且对机器学习也有了兴趣),嗯,各位应该懂的!

本文已转载个人技术公众号:UncleCatMySelf
欢迎留言讨论与点赞
上一篇推荐:【Java猫说】SSM+Netty实现软硬件通信,真实项目案例
下一篇推荐:【Java猫说】项目架构的演进史(大型电商系列)

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/71661.html

相关文章

  • Java猫说】项目架构的演进史(大型电商系列)

    摘要:我们本次也要从核心模块演进细节到核心架构设计思想,最后实现高性能高并发高可用的电商实战项目。过程中安全性数据分析监控反作弊继续发展架构服务化消息队列任务调度多机房因此任何一个高大上的项目技术架构和开发技术实现不是一蹴而就的。 阅读本文约 7分钟 大家都知道,一个真实的企业级项目开发过程、大型企业项目开发的编码思维、经验、技巧、高质量的线上作品都是需要耗费人力物力和成本,同样我们的项目...

    yuanxin 评论0 收藏0
  • Java猫说】项目架构的演进史(大型电商系列)

    摘要:我们本次也要从核心模块演进细节到核心架构设计思想,最后实现高性能高并发高可用的电商实战项目。过程中安全性数据分析监控反作弊继续发展架构服务化消息队列任务调度多机房因此任何一个高大上的项目技术架构和开发技术实现不是一蹴而就的。 阅读本文约 7分钟 大家都知道,一个真实的企业级项目开发过程、大型企业项目开发的编码思维、经验、技巧、高质量的线上作品都是需要耗费人力物力和成本,同样我们的项目...

    sumory 评论0 收藏0
  • Java构建一个简单的WebSocket聊天项目之新增HTTP接口调度

    摘要:前言大家可以看看上一篇用构建一个简单的聊天室在上一篇文章中我们已经实现了自我对话好友交流群聊离线消息等的功能。系统通知恭喜您连续登录超过天,奖励积分。 本文首发公众号与个人博客:Java猫说 & 猫叔的博客 | MySelf,转载请申明出处。 前言 大家可以看看上一篇:用Java构建一个简单的WebSocket聊天室 在上一篇文章中我们已经实现了:自我对话、好友交流、群聊、离线消息等...

    vvpvvp 评论0 收藏0

发表评论

0条评论

dingding199389

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<