智能解析套件

一、简介

  在项目中经常遇到这样的工作:接收报文数据,根据协议按字节、位解析,将解析结果在界面显示、存储数据库、直接判断..不同的项目协议不同,往往需要程序员每次针对协议重新编写代码,即使步骤完全一样。合格的程序员,或者说正常的程序员肯定不会重复造轮子,本人惭愧,重复造了两年的轮子,幸好浪子回头金不换。这里根据当前项目总结了一套智能解析套件,主要功能:从网络【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周不止。 

posted @ 2019-11-21 16:46  朱小勇  阅读(388)  评论(0编辑  收藏  举报