智能解析套件
一、简介
在项目中经常遇到这样的工作:接收报文数据,根据协议按字节、位解析,将解析结果在界面显示、存储数据库、直接判断..不同的项目协议不同,往往需要程序员每次针对协议重新编写代码,即使步骤完全一样。合格的程序员,或者说正常的程序员肯定不会重复造轮子,本人惭愧,重复造了两年的轮子,幸好浪子回头金不换。这里根据当前项目总结了一套智能解析套件,主要功能:从网络【UDP或者TCP】获取数据,根据对应的协议,将数据自动解析并存储到对应的数据库。数据库连接使用数据库连接池,所有操作运行在多线程中,由线程池调度。整体架构如下图所示:
二、系统组成
1、建表软件
2、建json软件
3、智能解析软件
三、协议格式说明
1、由excel存储
2、支持多协议
3、单个协议excel格式
需要人工将已有格式转为上图的格式,如果有多个协议追加即可
四、建表软件
这个软件是用来快速建数据表的,假设没有这个软件,那么excel里的那么多表都需要手动去建立,这肯定不是我们想要的。有了这个建表软件,我们就可以一键建立数据库了。界面:
五、建json软件
这个软件是用来将excel转化为json格式的,主要存储这些信息:表、字段、字段属性、字段在报文中的位置,也就是解析规则。那为什么不直接用excel来存储解析规则呢?还是现成的,干嘛还要再转一次?->excel跨平台不好,而且文件大,易修改。界面:
六、智能解析软件
这个软件是智能解析套件的核心,是一个控制台的程序,工程结构如图:
类说明
config:配置文件的读取,以及相关const字段的定义
connectionpool:数据库连接池
mymethod:提供静态函数,日志等功能
myrun:线程池调度,主要用于执行一条sql语句
mysqltool:对QSqlDatabase的封装,自动回收数据库连接
mytcp:tcp对象的封装
myudp:udp对象的封装
parse:解析工作,对数据、线程池的调度
七、其他
光是实现这个智能解析套件并不复杂,但是需要考虑的东西特别多。比如:
数据来源是udp还是tcp,还是http?
不同协议报文头的位置和长度不一样怎么区别?
有些数据不需要存储,有些需要存储?
一个表中有附加字段怎么办?如id、date等?
...
可能一想到这些问题,有些程序员就会认为:我还不如重写代码呢?其实都是有解决办法的,就看怎么去处理。就目前我所完成的这套智能解析套件,如果接入新的项目,需要在代码里新加判断,用于识别当前的报文和当前的解析规则,然后其他的不用管。如果想要优化,可能从解析规则下手,达到新项目不加新代码的目的。
实际测的,当有可以走这个框架的新项目来之后,我仅仅花了几小时就完成了,如果重头写软件可能花上1周不止。
长风破浪会有时,直挂云帆济沧海!
可通过下方链接找到博主
https://www.cnblogs.com/judes/p/10875138.html