一种适用于通信5G场景下多层级复杂报文的解析方法与流程

文档序号:34116253发布日期:2023-05-11 00:11阅读:22来源:国知局
一种适用于通信5G场景下多层级复杂报文的解析方法与流程

本发明属于通信,尤其是涉及一种适用于通信5g场景下多层级复杂报文的解析方法。


背景技术:

1、从5g业务上线推广后,电信行业计费域的话单信息的传输协议从原有的文件协议为主,逐步转为以消息协议为主。2018年以前,基于性能的要求,后端业务和网元交互中,消息协议主要以基于c/c++的dcc协议为主,少数的http+json协议主要使用在ajax等偏前端的架构中。2018年以后,基于http技术的发展,开始逐步使用http2等传输协议进行计费域网元与网元之间、应用模块之间的数据交互,数据格式也以xml逐步转换为json。

2、json是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。这些特性使json成为理想的数据交换语言。

3、消息协议采用restfull设计架构和http+json格式。http协议在从1.0版本升级为2.0版本后传输效率和并发性能已完全可以满足目前电信行业计费域后端应用的需求;关于数据格式的解析,行业内json解析的api主要以java语言为主,比如google的gson。而基于电信计费后端应用的场景的使用过程中依然以c/c++为主要的编程语言,针对c/c++公开的json编解码库极少。

4、目前,电信行业计费域的话单数据每日的量级在上亿级别,对接模式为实时在线对接。按照电信行业内标准要求,每一条话单端到端处理效率为1s以内,其中涉及的话单的处理环节依次包括网元、代理、预处理、踢重、批价、账务和提醒七个环节,如图2所示,每个环节的性能要求不能高于200ms。基于这个性能要求,针对话单报文采用http2协议的情况下,数据格式采用json格式,针对计费业务的话单格式则为:

5、

6、

7、由话单格式可知,话单的层级结构相对普通的前端业务的json报文复杂很多,主要表现在:(1)报文的层级一般都超过5级;(2)报文体大,有大多数的报文会在某些环节的传输过程中超过1m,有的甚至达到了将近10m;(3)由于业务的天然复杂性,报文中的字段定义很多,基本都会包括,用户、客户、号码、订购、销售品实例、销售品、属性、状态、停开机轨迹、话单类型、费用、流量、语音等等。

8、目前针对现有的报文解析方式一般会采用开源的json库。基本的解析方法如下:

9、方法一:

10、

11、方法二:

12、

13、针对方法一,业务层级太多和报文太大,导致了整个话单在解析过程中带来了性能损耗,其时间复杂度为o(n^2)。

14、针对方法二,时间复杂度降低,但是在业务开发过程中导致复杂度上升,开发人员针对多层业务元素采用数组的方式,[]中的标识需要对接数据字典进行逐个比对。代码可读性下降,导致开发效率下降。

15、其他公开的绝大多数的json解析,都是以java语言为主,无法满足电信计费域的性能要求。并且在话单解析的过程中需要多次加载报文数据体,如图3所示,每进行一次josn解析都要重复进行加载报文、基础解析、按照key循环查找、吐出value、销毁这一全流程,对于图2中的过程,需要多次进行循环查找导致了性能损耗。


技术实现思路

1、针对上述问题,本发明提出了一种适用于通信5g场景下多层级复杂报文的解析方法,提供一个简洁的、针对json数据格式的、基于c/c++编程语言的通用编解码库,简化现有json编解码库的使用方式,减少循环嵌套的次数,降低程序的时间复杂度。

2、为实现上述目的,本发明公开了一种适用于通信5g场景下多层级复杂报文的解析方法,包括:

3、对linux自带的json编码库进行二次封装,得到独立的编码功能调用接口,包括:创建新的json_object节点、创建新的json_object组节点,得到独立的解码功能调用接口,包括:加载需要解析的json报文、获取字段值;

4、开发人员根据需要选择各编码功能调用接口或解码功能调用接口添加到对应的应用功能中;

5、报文解析时,调用所述加载需要解析的json报文这一解码功能调用接口,加载并缓存json报文数据;

6、调用所述创建新的json_object节点或所述创建新的json_object组节点这一编码功能调用接口,基于path的方式创建json_object节点或json_object组节点;

7、调用所述获取字段值这一解码功能调用接口,基于创建的所述json_object节点或所述json_object组节点反复读取缓存的所述json报文数据,获得各字段值。

8、作为本发明的进一步改进,

9、所述编码功能调用接口还包括设置多组节点的值;

10、获得各字段值后,调用所述设置多组节点的值这一编码功能调用接口,基于path形式将各字段名称、各字段值按预设结构体输出,得到数据解析结果。

11、作为本发明的进一步改进,

12、所述数据解析结果以path的方式返回。

13、作为本发明的进一步改进,

14、所述解码功能调用接口还包括缓存释放;

15、获得所述数据解析结果代码后,调用所述缓存释放这一解码功能调用接口,释放缓存的所述json报文数据。

16、作为本发明的进一步改进,

17、缓存所述json报文数据时,采用map形式;所述map的key中存放的是path。

18、作为本发明的进一步改进,

19、基于创建的所述json_object节点或所述json_object组节点反复读取缓存的所述json报文数据,获得各字段值时,包括:

20、将创建的所述json_object节点或所述json_object组节点中各字段的path作为key,到以map形式缓存的所述json报文数据中进行数据定位,找到各字段对应的value。

21、作为本发明的进一步改进,

22、所述解码功能调用接口还包括获取字段最大重复次数。

23、作为本发明的进一步改进,

24、对linux自带的json编码库进行二次封装时,采用c或c++编程语言。

25、作为本发明的进一步改进,

26、所述编码功能调用接口和解码功能调用接口均可通过动态库或静态库的调用方式进行调用;

27、所述编码功能调用接口和解码功能调用接口的代码文件还可直接集成到对应的应用功能中。

28、与现有技术相比,本发明的有益效果为:

29、本发明首先通过二次封装简化了编解码库中方法的数量,保证覆盖电信业务数据编解码的大多数使用场景的同时,将编解码库中方法的数量由20个以上减至10个以内;其次,本技术通过path的方式简化了业务层级数,降低了解析的时间复杂度;然后,还通过控制报文缓存的存储方式和释放换存的时间,使得可以一次缓存多次反复使用报文数据,避免了反复加载报文数据导致的性能损耗;最后,本发明的报文解析方法,使得开发人员编写的代码的可读性及开发效率均大大提高。

30、本发明采用linux自带的json编码库作为基础的json库,可以适配多平台的使用方式。

31、本发明提供的二次封装后的json编解码库,在进行复杂报文解析时,只需要将json报文数据初始化一次,将json报文数据加载到缓存后,可以多次使用,在本次话单所有的业务处理完成后再释放。从而减少多次初始化带来的性能损耗。

32、本发明提供了一个简洁的、针对json数据格式的、基于c/c++编程语言的通用编解码库,减少现有的json编解码库中api的个数,简化现有的json编解码库的使用方式,减少循环嵌套的次数,降低程序的时间复杂,让开发人员在开发过程中可以清晰的看到从第1层级到最后一个层级之间的关联关系,将多层级复杂报文解析的时间复杂度由原来的o(n^2)降低为o(n)。

33、本发明的方法使开发人员针对代码的编写直接按照path的方式进行,针对编解码过程的实现效率提升了30%-50%,不需要频繁的查找字典文档对应上下级关系,代码清晰可读。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1