CN112714044B - 基于形式语言协议的网络数据解析方法、装置及存储介质 - Google Patents
基于形式语言协议的网络数据解析方法、装置及存储介质 Download PDFInfo
- Publication number
- CN112714044B CN112714044B CN202011581921.3A CN202011581921A CN112714044B CN 112714044 B CN112714044 B CN 112714044B CN 202011581921 A CN202011581921 A CN 202011581921A CN 112714044 B CN112714044 B CN 112714044B
- Authority
- CN
- China
- Prior art keywords
- network data
- protocol
- executable code
- calling
- formal language
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L43/00—Arrangements for monitoring or testing data switching networks
- H04L43/18—Protocol analysers
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于形式语言协议的网络数据解析方法及装置,该方法包括:读取网络协议的源文件,其中,源文件采用形式语言描述网络协议的解码过程;将网络协议的源文件转换为可执行代码;执行可执行代码,对接收到的网络数据进行解析,其中,网络数据为基于所述网络协议传输的数据。本发明能够方便编写各种网络协议,实现对各种网络协议的数据解析。
Description
技术领域
本发明涉及通信技术领域,尤其涉及一种基于形式语言协议的网络数据解析方法及装置。
背景技术
本部分旨在为权利要求书中陈述的本发明实施例提供背景或上下文。此处的描述不因为包括在本部分中就承认是现有技术。
网络协议为网络中进行数据交换而建立的规则、标准或约定的集合。通过对网络通信数据进行解析,从而对协议内容进行解码。网络协议的数量众多,内容庞杂,需要有一种方式,能够方便的编写程序完成对通讯数据进行解析的任务。
发明内容
本发明实施例中提供了一种基于形式语言协议的网络数据解析方法,用以解决现有技术中由于网络协议数量较多,导致网络数据解析复杂的技术问题,该方法包括:读取网络协议的源文件,其中,源文件采用形式语言描述网络协议的解码过程;将网络协议的源文件转换为可执行代码;执行可执行代码,对接收到的网络数据进行解析,其中,网络数据为基于所述网络协议传输的数据。
本发明实施例中还提供了一种基于形式语言协议的网络数据解析装置,用以解决现有技术中由于网络协议数量较多,导致网络数据解析复杂的技术问题,该装置包括:形式语言协议读取模块,用于读取网络协议的源文件,其中,源文件采用形式语言描述网络协议的解码过程;形式语言可执行代码生成模块,用于将网络协议的源文件转换为可执行代码;网络数据解析模块,用于执行可执行代码,对接收到的网络数据进行解析,其中,网络数据为基于所述网络协议传输的数据。
本发明实施例中还提供了一种计算机设备,用以解决现有技术中由于网络协议数量较多,导致网络数据解析复杂的技术问题,该计算机设备包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述基于形式语言协议的网络数据解析方法。
本发明实施例中还提供了一种计算机可读存储介质,用以解决现有技术中由于网络协议数量较多,导致网络数据解析复杂的技术问题,该计算机可读存储介质存储有执行上述基于形式语言协议的网络数据解析方法的计算机程序。
本发明实施例中,采用统一的形式语言编写各种网络协议,使得数据解析端在读取到网络协议的形式语言文件后,将其转换为可执行代码,并通过执行该可执行代码,对接收到的网络数据进行解析。通过本发明实施例,能够方便编写各种网络协议,实现对各种网络协议的数据解析。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1为本发明实施例中提供的一种基于形式语言协议的网络数据解析方法流程图;
图2为本发明实施例中提供的一种形式语言可执行代码的生成示意图;
图3为本发明实施例中提供的又一种形式语言可执行代码的生成示意图;
图4为本发明实施例中提供的一种基于形式语言的网络协议解析架构示意图;
图5为本发明实施例中提供的一种基于形式语言协议的网络数据解析装置示意图;
图6为本发明实施例中提供的一种计算机设备示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚明白,下面结合附图对本发明实施例做进一步详细说明。在此,本发明的示意性实施例及其说明用于解释本发明,但并不作为对本发明的限定。
在本说明书的描述中,所使用的“包含”、“包括”、“具有”、“含有”等,均为开放性的用语,即意指包含但不限于。参考术语“一个实施例”、“一个具体实施例”、“一些实施例”、“例如”等的描述意指结合该实施例或示例描述的具体特征、结构或者特点包含于本申请的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。各实施例中涉及的步骤顺序用于示意性说明本申请的实施,其中的步骤顺序不作限定,可根据需要作适当调整。
本发明实施例中提供了一种基于形式语言协议的网络数据解析方法,图1为本发明实施例中提供的一种基于形式语言协议的网络数据解析方法流程图,如图1所示,该方法包括如下步骤:
S101,读取网络协议的源文件,其中,源文件采用形式语言描述网络协议的解码过程。
在具体实施时,可按照语言规则,以文本方式描述对协议解码过程,生成网络协议的源文件。
需要说明的是,本发明实施例中描述网络协议的形式语言课提供必要的函数定义/调用、流程控制、变量、表达式等基础部分,与一般的编程语言类似。
可选地,本发明实施例中提供的基于形式语言协议的网络数据解析方法中,网络协议可以包括但不限于:流传输协议和包传输协议。无论是流传输协议(例如,TCP 协议),还是包传输协议(例如,UDP协议),只要采用不同的底层支持,能够使得语言在表达上保持类似。
本发明实施例中提供的形式语言编写的网络协议,能够提供状态保持的能力,用户不需要显示编程,不用关心数据是如何到达的,只需要按照协议关心的方式去获取数据处理即可。当协议模块取不到数据时,形式语言可以保留当时执行的上下文,在下一次再有数据的情况下继续处理,极大地为协议处理提供了便利。对于流协议来说,该特性可以使协议解析程序以线性方式来编写。
S102,将网络协议的源文件转换为可执行代码。
在一个实施例中,如图2所示,上述S102可以直接将网络协议的源文件转换为可执行代码;在另一个实施例中,如图3所示,上述S102也可以先将网络协议的源文件转换为中间语言的源代码,再采用中间语言的编译器,将中间语言的源代码转换为可执行代码。
本发明实施例中上述S101和S102可以是由编译程序执行的,当编译程序读入协议源文件后,还可以对其进行语法检查,并在语法检查通过后,进行翻译,将网络协议的源文件直接转换为可执行代码,或先转换为另一种语言(中间语言)的源代码,再采用相应语言的编译器转换为可执行代码。
S103,执行可执行代码,对接收到的网络数据进行解析,其中,网络数据为基于所述网络协议传输的数据。
在具体实施时,上述S103可以通过如下步骤来实现:监测是否接收到网络数据;当未接收到网络数据的情况下,记录可执行代码的执行状态信息,并在接收到网络数据的情况下,根据记录的执行状态信息,继续执行可执行代码,对接收到的网络数据进行解析。
进一步地,在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析方法还可以包括如下步骤:当未接收到网络数据的情况下,在用户程序中调用非阻塞函数,其中,非阻塞函数用于在可执行代码无法满足执行条件时退出用户程序。
更进一步地,在在用户程序中调用非阻塞函数之后,本发明实施例中提供的基于形式语言协议的网络数据解析方法还可以包括如下步骤:记录用户程序中调用非阻塞函数的调用深度和调用位置;在接收到网络数据的情况下,根据记录的调用深度和调用位置,继续执行可执行代码,对接收到的网络数据进行解析。
在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析方法还可以包括如下步骤:将用户程序中出现在非阻塞函数调用前后存在依赖关系的数据,保存到全局变量中;则上述S103可以根据保存到全局变量中的数据,以及记录的调用深度和调用位置,继续执行可执行代码,对接收到的网络数据进行解析。
图4为本发明实施例中提供的一种基于形式语言的网络协议解析架构示意图,如图4所示,由协议解析框架加载形式语言可执行代码,由形式语言支撑框架配合,形成协议解析模块,完成协议解析的功能。协议解析模块提供协议解析框架需要的标准接口,包括协议模块初始化接口,协议模块承载表发布接口,协议模块承载表注册接口,协议模块协议解析接口等。
可选地,本发明实施例中的形式语言支撑框架提供大量的接口,供形式语言中方便使用,例如:①方便用户按照数据域在载荷中的位置、长度和性质取出数据域;②方便用户按照特定字符分割取出数据域;③方便用户按照TLV方式取出数据域。
下面以一个流处理结构的形式语言为例,对本发明实施例进行详细说明:
在上面的程序段中,提供了一个HTTP协议解析的简单示例。
其中,PROTO_INIT、INIT、REGISTER、PUBLISH是本发明实施例设计的一些协议解析模块需要实现的接口,完成协议模块的初始化,发布承载表,注册其他协议发布的承载表等操作。
PROTO(STREAM,"HTTP")是协议解析的函数入口,进入函数以后是一个while(1)的循环。首先获取客户端到服务器的请求,然循环获取数据后进行解析,接着获取服务器到客户端的响应,然后不断重复这个过程。程序采用同步柱塞模型编写,即在形式上,一行程序执行完成才会执行下一行,一个函数执行完成才会执行下一个。
例如:
SS_GET_SEG_BY_DELIMITOR("\r\n",4096,stream_dir,0);
需要在stream_dir标识的方向上,最长4096的范围内,搜索"\r\n",如果搜索到,则返回这一段数据。由于网络数据报文一个一个到来,需要多个报文组合在一起才能达到4096字节的长度,但是这些数据包是分散每秒几万个几百万个甚至更多的数据包之中的,这些数据包可能需要几秒钟或者1分钟或者更长时间才能全部到达,如果 SS_GET_SEG_BY_DELIMITOR一直未能在数据中查找到"\r\n"时,一直会等到数据达到4096才会完成函数调用。这样要么就会在等待数据包到达的时间内占据一个CPU核的处理能力从而丧失处理其他数据包的机会。要么调度CPU来处理有数据的流量也会因为并发数据流可能达到几百万或者更高,也无法直接采用多任务/多线程调度的方式来完成。而采用异步编程方法,在缺乏数据的时候让出CPU,则需要响应各种异步事件或者采用回调的形式实现功能,则会使编程变得非常复杂,难于阅读,难于调试。
为了解决这个问题,我们提出了一种方法,在类似当不满足执行条件时,设法将CPU的控制权交出,还给框架。在下一次框架检测到数据到来之后,能够从上次中断的位置继续执行,从而将同步阻塞式的程序转换为非阻塞的形式来执行。为了描述的简单和一致,以下称一个函数具备在无法满足执行条件时退出行为的为非阻塞函数。另外,为了简单起见,下面不区分函数和子程序。
为了让一个按照阻塞方式编写的程序,在形式语言支撑框架的配合下,能够实际上以非阻塞的特性运行并正确产生结果,需要解决如下两个方面的问题:
(1)记录程序执行到的位置,以及恢复到程序执行的位置:
首先,需要知道支撑框架提供的函数接口中有哪些是非阻塞函数。
然后对形式语言编写的程序进行分析。形式语言编写的程序可以定义用户函数,如果一个用户函数内部存在对支撑框架的非阻塞函数的调用,那么也标记这个用户函数为非阻塞函数,这个过程一直迭代进行,直到最顶层的程序入口,例如这里的 PROTO函数,也就是下面的_body函数。每调用一个非阻塞函数前,需要记录当前调用在函数的位置,然后在调用进入非阻塞函数后,需要增加调用的深度,并且在这和函数内进一步调用非阻塞函数时的为支持,然后进入非阻塞函数后,继续增加调用的深度,一直到调用框架的非阻塞函数的接口为止。
上面提到的记录位置和记录调用深度,即为记录函数的执行路径。我们通过下面的方法来完成,设置在程序中全局有效的变量,记录最终的调用深度和每个深度上的非阻塞函数的调用位置,在本发明实施例中,可使用_depth变量记录调用的深度,使用_line_no[MAX_DEPTH]数组来记录每个深度上的阻塞函数的调用位置。为了简单起见,采用了固定大小数组,实际上可以采用链表、队列、可变大小数组等方法。
在程序正常执行时,
每次进入一个标记为非阻塞的函数前,将调用位置记录在_line_no数组的第 _depth个位置上。
进入非阻塞函数后,_depth变量加1,并根据_line_no[_depth]变量进行跳转,如果_line_no[_depth]变量为0,那么从函数头部执行,否则就会跳转到上次记录的非阻塞函数的调用点位置。这里采用跳转到标号实现,也可以有其他的实现方法,例如 switch分支等。
当函数正常返回时,即主动调用return时,会设置_line_no[_depth]为0,_depth变量减1。
而当发生非阻塞函数条件不具备时,我们可以采用抛出异常的方式,在框架调用的入口捕获可能的异常,从而直接返回到框架调用的入口,从而保留当时的_depth和 _line_no数组内容。此处也可以采用根据全局错误码逐层返回的形式。在这种情况下逐层返回的情况下,_depth变量和_line_no数组内容均保持不变。
这样,在一次正常的非阻塞调用前后,_depth变量会保持不变,而_line_no[_depth] 会保持为0,而在发生非阻塞函数条件不具备时而返回时,执行路径就被记录在_depth 和_line_no数组中。
返回到框架调用的入口以后,即此时CPU的执行权就返回给了框架,而用户的程序就暂停了。在下一次具备数据之后,框架会再次调用用户的程序的时候,用户的程序将根据_depth和_line_no数组的信息转到上次暂停的位置,继续执行。
(2)保存当前的上下文环境:
用户程序中的数据,出现在非阻塞调用前后存在依赖关系的,需要在全局变量中进行保存。为了简单,下面例子将所有使用到的变量均作为全局变量,这样在多次调用期间会保持不变,从而维持上下文环境。
下面是将上面的形式语言通过编译转换为C++语言的一个示例,_body函数即上面形式语言的PROTO入口。
SS_GET_SEG_BY_DELIMITOR是支撑框架提供的一个非阻塞接口,当没有足够数据的时候会返回,且给出错误码,错误码记录在全局变量的_err中。支撑框架的非阻塞函数需要保证因为数据不足而产生的多次调用不发生负面效果,而且仍然可以产生正确结果。也就是说,不会因为数据不足而对外部的形式语言使用的全局变量产生修改,或者对操作的数据的释放或者修改。
这样,我们通过对用户脚本语言进行编译后,自动在非阻塞函数的函数入口附近,非阻塞函数的调用位置,正常返回位置(如RETURN位置),函数尾部生成额外的代码,
入口的代码用于记录调用深度,并根据_line_no数组在_detpth位置的内容实现跳转。
非阻塞函数的函数入口前面,会生成标号,入口后面,会生成错误码检测的代码,且判断是否会发生数据不够的情况,
如果没有发生数据不够的情况,会记录这个时候的位置;
如果发生数据不够的情况,则立刻逐层退出并保持_depth和_line_no数据的内容。
这样在下一次调用时,可以根据记录的内容直接跳转到指定位置。正常的返回位置,函数尾部的代码用于回复_depth,并将_line_no数组_depth位置的内容清0。
其中宏_G的用途是从_builtin_global这个对象中获取对应的变量。为了方便多个协议解析模块的副本同时运行,本发明实施例中,定义了_builtin_global对象来存放在形式语言中定义的协议解析模块内部的变量,这些变量再协议解析模块内部全局生效。本发明实施例设计的通过形式语言的编译器在生成函数调用语句时,自动生成了指向_builtin_global对象的参数,这样通过在所有的函数调用之间传入这个对象,从而实现变量的模块内生效的全局作用范围。
也就是说在每次调用了非阻塞函数之后,会测试函数的错误状态,如果_err为 E_WOULD_BLOCK,即等待数据可能会引起阻塞时,会直接从整个调用栈中立刻逐层返回,且保留执行路径。采用这种方法以后不需要保存栈的信息,仅需要保存必须的全局变量。
为了系统实现的简单,本发明实施例中,在形式语言中将变量的作用范围控制在用户程序范围内全局有效。
在框架中第一次调用_body前时,会初始化_builtin_global对象,从而初始化 _depth,_line_no数组,_err等变量。_depth设置为0,_line_no也整个数据每个元素初始化为0。
之后_builtin_global的生命周期与一个会话的生命周期一致,在一个会话的多次调用之间会持续。
进一步的,为了保证结果的稳定可靠,当一行程序中出现非阻塞函数的计算组合时,通过形式语言编译系统会提示问题,保证每行最多仅有一个非阻塞函数调用。
例如SS_GET_INT是一个从协议数据中取得整数的非阻塞函数调用,如果形式语言写成
i=SS_GET_INT(s1,BE,BYTE_4,POS_RELATIVE,POS_RELATIVE,BIT_32)+ SS_GET_INT(s1,BE,BYTE_4,POS_RELATIVE,POS_RELATIVE,BIT_32);
表示要计算i为两个连续32bit整数的和,此时编译系统提示问题,避免出现非阻塞函素调用时候产生负面效果。
这样,通过上述方法就实现了将形式语言的阻塞式程序转换成为了非阻塞的运行方式,极大提高了协议解析模块的编写效率。
基于同一发明构思,本发明实施例中还提供了一种基于形式语言协议的网络数据解析装置,如下面的实施例所述。由于该装置实施例解决问题的原理与基于形式语言协议的网络数据解析方法相似,因此该装置实施例的实施可以参见基于形式语言协议的网络数据解析方法的实施,重复之处不再赘述。
图5为本发明实施例中提供的一种基于形式语言协议的网络数据解析装置示意图,如图5所示,该装置包括:形式语言协议读取模块51、形式语言可执行代码生成模块52和网络数据解析模块53。
其中,形式语言协议读取模块51,用于读取网络协议的源文件,其中,源文件采用形式语言描述网络协议的解码过程;形式语言可执行代码生成模块52,用于将网络协议的源文件转换为可执行代码;网络数据解析模块53,用于执行可执行代码,对接收到的网络数据进行解析,其中,网络数据为基于所述网络协议传输的数据。
可选地,本发明实施例中提供的基于形式语言协议的网络数据解析装置中,网络协议可以包括但不限于:流传输协议和包传输协议。
在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析装置中,形式语言可执行代码生成模块52还用于:将网络协议的源文件转换为中间语言的源代码;采用中间语言的编译器,将中间语言的源代码转换为可执行代码。
在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析装置中,网络数据解析模块53还用于利用用户程序获取接收到的网络数据,并利用可执行代码对获取到的网络数据进行解析处理,在接收到的网络数据未达到预设数量的情况下,停止运行可执行代码,并记录可执行代码的执行状态信息和位置信息,并在接收到的网络数据达到预设数量的情况下,根据记录的执行状态信息和位置信息,继续执行可执行代码,对接收到的网络数据进行解析。
在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析装置还包括:非阻塞执行模块54,用于在接收到的网络数据未达到预设数量的情况下,在用户程序中调用非阻塞函数,其中,非阻塞函数用于在可执行代码无法满足执行条件时退出用户程序。
在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析装置中,网络数据解析模块53还用于记录用户程序中调用非阻塞函数的调用深度和调用位置;在接收到的网络数据达到预设数量的情况下,根据记录的调用深度和调用位置,继续执行可执行代码,对接收到的网络数据进行解析。
在一个实施例中,本发明实施例中提供的基于形式语言协议的网络数据解析装置还包括:全局变量模块55,用于将用户程序中出现在非阻塞函数调用前后存在依赖关系的数据,保存到全局变量中;则上述网络数据解析模块53还用于根据保存到全局变量中的数据,以及记录的调用深度和调用位置,继续执行可执行代码,对接收到的网络数据进行解析。
基于同一发明构思,本发明实施例中还提供了一种计算机设备,用以解决现有技术中由于网络协议数量较多,导致网络数据解析复杂的技术问题,图6为本发明实施例中提供的一种计算机设备示意图,如图6所示,该计算机设备60包括存储器601、处理器602及存储在存储器601上并可在处理器602上运行的计算机程序,处理器 602执行计算机程序时实现上述基于形式语言协议的网络数据解析方法。
基于同一发明构思,本发明实施例中还提供了一种计算机可读存储介质,用以解决现有技术中由于网络协议数量较多,导致网络数据解析复杂的技术问题,该计算机可读存储介质存储有执行上述基于形式语言协议的网络数据解析方法的计算机程序。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等) 上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限定本发明的保护范围,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种基于形式语言协议的网络数据解析方法,其特征在于,包括:
读取网络协议的源文件,其中,所述源文件采用形式语言描述网络协议的解码过程;
将所述网络协议的源文件转换为可执行代码;
执行所述可执行代码,对接收到的网络数据进行解析,其中,所述网络数据为基于所述网络协议传输的数据;
其中,执行所述可执行代码,对接收到的网络数据进行解析,包括:
利用用户程序获取接收到的网络数据,并利用所述可执行代码对获取到的网络数据进行解析处理;
在接收到的网络数据未达到预设数量的情况下,在用户程序中调用非阻塞函数,其中,所述非阻塞函数用于在所述可执行代码无法满足执行条件时退出所述用户程序;
记录所述用户程序中调用非阻塞函数的调用深度和调用位置;
在接收到的网络数据达到预设数量的情况下,根据记录的调用深度和调用位置,继续执行所述可执行代码,对接收到的网络数据进行解析。
2.如权利要求1所述的方法,其特征在于,将所述网络协议的源文件转换为可执行代码,包括:
将所述网络协议的源文件转换为中间语言的源代码;
采用所述中间语言的编译器,将所述中间语言的源代码转换为可执行代码。
3.如权利要求1所述的方法,其特征在于,所述方法还包括:
将用户程序中出现在非阻塞函数调用前后存在依赖关系的数据,保存到全局变量中;
其中,根据记录的调用深度和调用位置,继续执行所述可执行代码,对接收到的网络数据进行解析,包括:根据保存到全局变量中的数据,以及记录的调用深度和调用位置,继续执行所述可执行代码,对接收到的网络数据进行解析。
4.如权利要求1至3任一项所述的方法,其特征在于,所述网络协议包括:流传输协议和包传输协议。
5.一种基于形式语言协议的网络数据解析装置,其特征在于,包括:
形式语言协议读取模块,用于读取网络协议的源文件,其中,所述源文件采用形式语言描述网络协议的解码过程;
形式语言可执行代码生成模块,用于将所述网络协议的源文件转换为可执行代码;
网络数据解析模块,用于执行所述可执行代码,对接收到的网络数据进行解析,其中,所述网络数据为基于所述网络协议传输的数据;
其中,所述网络数据解析模块具体用于:利用用户程序获取接收到的网络数据,并利用所述可执行代码对获取到的网络数据进行解析处理;在接收到的网络数据未达到预设数量的情况下,在用户程序中调用非阻塞函数,其中,所述非阻塞函数用于在所述可执行代码无法满足执行条件时退出所述用户程序;记录所述用户程序中调用非阻塞函数的调用深度和调用位置;在接收到的网络数据达到预设数量的情况下,根据记录的调用深度和调用位置,继续执行所述可执行代码,对接收到的网络数据进行解析。
6.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至4任一项所述基于形式语言协议的网络数据解析方法。
7.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质存储有执行权利要求1至4任一项所述基于形式语言协议的网络数据解析方法的计算机程序。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011581921.3A CN112714044B (zh) | 2020-12-28 | 2020-12-28 | 基于形式语言协议的网络数据解析方法、装置及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011581921.3A CN112714044B (zh) | 2020-12-28 | 2020-12-28 | 基于形式语言协议的网络数据解析方法、装置及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112714044A CN112714044A (zh) | 2021-04-27 |
CN112714044B true CN112714044B (zh) | 2022-06-07 |
Family
ID=75545842
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011581921.3A Active CN112714044B (zh) | 2020-12-28 | 2020-12-28 | 基于形式语言协议的网络数据解析方法、装置及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112714044B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114513566A (zh) * | 2022-02-17 | 2022-05-17 | 上海阅维科技股份有限公司 | 自定义网络协议解析方法、系统、介质及电子设备 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106412086A (zh) * | 2016-10-31 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
CN108141464A (zh) * | 2017-03-15 | 2018-06-08 | 深圳中兴力维技术有限公司 | 一种通信协议解析代码自动生成方法及系统 |
CN109491658A (zh) * | 2017-09-11 | 2019-03-19 | 高德信息技术有限公司 | 计算机可执行代码数据的生成方法及装置 |
CN111338616A (zh) * | 2020-03-24 | 2020-06-26 | 北京自如信息科技有限公司 | 协议解析代码的生成方法、装置及电子设备 |
CN111917777A (zh) * | 2020-08-03 | 2020-11-10 | 中国电子科技集团公司第三十六研究所 | 网络数据解析方法、装置和电子设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7401326B1 (en) * | 2001-10-24 | 2008-07-15 | Finisar Corporation | Compiling protocol analysis code using protocol database |
CN112073420B (zh) * | 2020-09-11 | 2023-07-04 | 杭州安恒信息技术股份有限公司 | 一种网络协议解析方法、装置及相关设备 |
-
2020
- 2020-12-28 CN CN202011581921.3A patent/CN112714044B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106412086A (zh) * | 2016-10-31 | 2017-02-15 | 武汉斗鱼网络科技有限公司 | 一种利用协议描述文件自动生成通信代码的方法及系统 |
CN108141464A (zh) * | 2017-03-15 | 2018-06-08 | 深圳中兴力维技术有限公司 | 一种通信协议解析代码自动生成方法及系统 |
CN109491658A (zh) * | 2017-09-11 | 2019-03-19 | 高德信息技术有限公司 | 计算机可执行代码数据的生成方法及装置 |
CN111338616A (zh) * | 2020-03-24 | 2020-06-26 | 北京自如信息科技有限公司 | 协议解析代码的生成方法、装置及电子设备 |
CN111917777A (zh) * | 2020-08-03 | 2020-11-10 | 中国电子科技集团公司第三十六研究所 | 网络数据解析方法、装置和电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112714044A (zh) | 2021-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Woodside et al. | Performance by unified model analysis (PUMA) | |
US9411568B2 (en) | Asynchronous workflows | |
Montesi et al. | Jolie: a java orchestration language interpreter engine | |
US8495593B2 (en) | Method and system for state machine translation | |
RU2005117775A (ru) | Реализация совместно исполняющихся программ на объектно-ориентированных языках | |
Hunleth et al. | Building customizable middleware using aspect-oriented programming | |
CN112714044B (zh) | 基于形式语言协议的网络数据解析方法、装置及存储介质 | |
US10496423B2 (en) | Method for opening up data and functions of terminal application based on reconstruction technology | |
AlTurki et al. | Dist-Orc: A rewriting-based distributed implementation of Orc with formal analysis | |
Hu et al. | Template-based AADL automatic code generation | |
Pagano et al. | A model based safety critical flow for the aurix multi-core platform | |
Yuan et al. | Compiling esterel for multi-core execution | |
Hamerski et al. | Evaluating serialization for a publish-subscribe based middleware for MPSoCs | |
Petriu et al. | Software performance models from system scenarios | |
Tanguay et al. | Nizza: A framework for developing real-time streaming multimedia applications | |
CN102006512B (zh) | 应用sax解析引擎的数字电视hsml解析方法及系统 | |
Tretter et al. | Executing dataflow actors as Kahn processes | |
Hugues et al. | Using AADL to build critical real-time systems: Experiments in the IST-ASSERT project | |
CN115576858B (zh) | 针对低代码前端应用的业务动作执行系统及可读存储介质 | |
US7039772B1 (en) | System, method, and computer program product for processing reflective state machines | |
Mohan et al. | Temporal analysis for adapting concurrent applications to embedded systems | |
Pouget et al. | Debugging component-based embedded applications | |
Barnes | Interfacing C and occam-pi. | |
Dubey et al. | Performance on HPC Platforms Is Possible Without C++ | |
Oliver | A uml profile for real-time system modelling with rate monotonic analysis |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
PE01 | Entry into force of the registration of the contract for pledge of patent right |
Denomination of invention: Network data parsing method, device, and storage medium based on formal language protocol Effective date of registration: 20230727 Granted publication date: 20220607 Pledgee: Beijing first financing Company limited by guarantee Pledgor: BEIJING HENGGUANG INFORMATION TECHNOLOGY Co.,Ltd. Registration number: Y2023980050082 |
|
PE01 | Entry into force of the registration of the contract for pledge of patent right |