zoukankan      html  css  js  c++  java
  • 智能解析套件

    一、简介

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

  • 相关阅读:
    IDEA中项目编码格式设置
    font awesome 页面小图标
    ffmpeg无损MP4转TS 及bat批量脚本
    Mysql超百万数据的导入导出
    查询流水表中所有用户最后一条和第一条记录
    css样式实现网页全黑白
    jsp中二维码展示及异步轮询查询
    支付宝当面付对接
    微信native支付对接
    Java和python实现斐波那契数列的感触
  • 原文地址:https://www.cnblogs.com/judes/p/11906641.html
Copyright © 2011-2022 走看看