CN102195895B - 一种消息发送、接收处理的方法及其装置 - Google Patents
一种消息发送、接收处理的方法及其装置 Download PDFInfo
- Publication number
- CN102195895B CN102195895B CN201110070754.0A CN201110070754A CN102195895B CN 102195895 B CN102195895 B CN 102195895B CN 201110070754 A CN201110070754 A CN 201110070754A CN 102195895 B CN102195895 B CN 102195895B
- Authority
- CN
- China
- Prior art keywords
- message
- dictionary
- child node
- resolved
- message dictionary
- 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
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L51/00—User-to-user messaging in packet-switching networks, transmitted according to store-and-forward or real-time protocols, e.g. e-mail
- H04L51/06—Message adaptation to terminal or network requirements
- H04L51/066—Format adaptation, e.g. format conversion or compression
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Information Transfer Between Computers (AREA)
- Stored Programmes (AREA)
Abstract
本发明公开了一种消息发送、接收处理方法及其装置,以实现基于不同软件版本的通信节点之间能够实现消息兼容,从而确保分布式系统中基于不同软件版本的通信节点之间能够正确的传递消息。接收方法包括:从接收到的消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息;从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息;比较所述第一消息字典和第二消息字典的版本,根据比较结果从所述消息中提取应用信息。采用本发明技术方案,实现了基于不同软件版本的通信节点之间能够实现消息兼容,确保了分布式系统中基于不同软件版本的通信节点之间能够正确的传递消息。
Description
技术领域
本发明涉及通信领域,尤其涉及一种消息发送处理方法及其装置、一种消息接收处理方法及其装置。
背景技术
目前,随着通信业务的快速发展,通信业务种类和用户数量等都呈现出爆炸式增长的发展趋势,随之而来的是需要传递处理海量的信息,这对通信设备的业务能力带来较大的挑战;为处理海量的信息,目前将通信设备的内部架构调整为更科学的分布式处理模型,分布式系统中各通信节点之间分工合作、流水化作业,从而使通信设备的整体性能得到最大限度的利用。
随着分布式系统中通信设备内部的通信节点数变得越来越多,各通信节点的分工更趋细化;在运作过程中,分布系统中的通信节点间需要经常交流种类繁多的内部控制信息,为简化上层应用的通信节点间通信,通常都会对操作系统提供的跨CPU(中央处理器)通信接口(如socket接口)进行封装,以实现按消息ID分发的消息通信方式;采用该种通信方式,应用只需要关心消息ID和消息内容本身接口,无需关心底层的socket创建、维护等过程,此通信方式简称“按消息结构通信”。根据软件集成化的基本要求,分布式系统中的各通信节点间使用统一的软件平台,因此分布式系统中的各通信节点间的通信(即CPU之间的通信)与通信节点内部不同进程间通信(即CPU内部通信)一样,收发两端只需要定义一个消息结构体和消息ID,即可实现CPU之间的通信。
随着新功能的加入,已有消息结构体不能满足日益增长的需求,当分布式系统中的部分通信节点使用新功能时,需要对已有的公用消息结构体进行修改,因此,为保证分布系统中的各通信节点间能够正常使用该公用消息结构体,对分布系统中的所有通信节点的软件版本进行升级。这种确保分布式系统中的各通信节点间能够正常使用公共消息结构体的方式,虽然具有一定的效力,但是一般情况下分布式系统中的通信节点的数量繁多,若对每个通信节点的软件版本进行升级将带来较大的工作量,甚至可能会带来不必要的工程风险。
发明内容
针对现有技术存在的上述技术问题,本发明实施例提供一种消息发送、接收方法及其装置,以提供一种新的消息兼容机制,使得基于不同软件版本的通信节点之间能够实现消息兼容,从而确保分布式系统中基于不同软件版本的通信节点之间能够正确的传递消息。
一种消息发送处理方法,应用于分布式系统,包括:
从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息;
将所述待发送消息对应的消息字典设置在所述待发送消息中,并发送所述待发送消息。
相应地,还提供一种消息发送处理装置,包括:
消息字典获取单元,用于从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息;
消息发送单元,用于将所述消息字典获取单元获取的所述消息字典设置在所述待发送消息中,并发送所述待发送消息。
一种消息接收处理方法,应用于分布式系统,包括:
接收消息,并从所述消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息;
从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息;
比较所述第一消息字典和第二消息字典的版本,根据比较结果从所述消息中提取应用信息。
相应地,本发明实施例还提供一种消息接收处理装置,包括:
消息字典提取单元,用于接收消息,并从所述消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息;
消息字典获取单元,用于从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息;
消息处理单元,用于比较所述消息字典提取单元提取得到的第一消息字典与所述消息字典获取单元获取的第二消息字典的版本,并根据比较结果从所述消息中提取应用信息。
一种分布式系统中的通信节点,包括:前述消息发送处理装置,和/或前述消息接收处理装置。
本发明实施例中,在接收到消息时,从该消息中提取用于描述所述消息的结构体信息的第一消息字典,并从本地存储的消息字典库中获取用于描述所述消息的结构体信息的第二消息字典,再比较所述第一消息字典和第二消息字典的版本,根据比较结果从所述消息中提取应用信息。采用本发明技术方案,在消息中携带有用于描述该消息的结构体信息的消息字典,并且接收端在接收到该消息时,将消息中携带的消息字典与本地存储的与该消息对应的消息字典的版本进行比较,根据比较结果从消息中提取相应的应用信息,从而实现了基于不同软件版本的通信节点之间能够实现消息兼容,从确保分布式系统中基于不同软件版本的通信节点之间能够正确的传递消息。
附图说明
图1为本发明实施例中消息发送处理的方法流程图;
图2为本发明实施例中消息接收处理的方法流程图;
图3为本发明实施例中生成消息字典的方法流程图;
图4为本发明实施例中分布式系统中通信节点具体进行消息发送处理的方法流程图;
图5为本发明实施例中分布式系统中通信节点具体进行消息接收处理的具体方法流程图;
图6为本发明实施例中消息发送处理装置的结构示意图;
图7为本发明实施例中消息接收处理装置的结构示意图。
具体实施方式
针对现有技术存在的上述技术问题,本发明实施例提供一种消息发送、接收处理的方法及其装置,以提供一种新的消息兼容机制,使得基于不同软件版本的通信节点之间能够实现消息兼容,从确保分布式系统中基于不同软件版本的通信节点之间能够正确的传递消息。消息发送处理方法可包括:从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息;将所述待发送消息对应的消息字典设置在所述待发送消息中,并发送所述待发送消息。消息接收处理方法可包括:在接收到消息时,从该消息中提取用于描述所述消息的结构体信息的第一消息字典,并从本地存储的消息字典库中获取用于描述所述消息的结构体信息的第二消息字典,再比较所述第一消息字典和第二消息字典的版本,根据比较结果从所述消息中提取应用信息。
下面结合说明书附图对本发明技术方案进行详细的描述。
参见图1,为本发明实施例中消息发送处理的方法流程图,该方法应用于分布式系统,以通信节点A发送消息为例,包括:
步骤101、通信节点A从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息。
步骤102、通信节点A将所述待发送消息对应的消息字典设置在所述待发送消息中,并发送所述待发送消息。
该步骤中,通信节点A将步骤101中获取的消息字典设置在所述待发送消息的头部。
较佳地,上述流程的步骤101之前还可包括步骤:
通信节点A生成所述待发送消息对应的消息字典,所述消息字典为用于描述所述待发送消息的结构体信息的数据结构,且包括至少一个用于描述字段信息的子节点。
通信节点A生成所述待发送消息对应的消息字典,可采用以下方式:
提取所述待发送消息的消息结构体的全局符号表信息,并根据所述全局符号表信息生成全局符号表调试信息;
根据所述全局符号表调试信息生成至少一个用于描述所述消息结构体的字段信息的子节点;
根据所述至少一个用于描述所述消息结构体的字段信息的子节点和所述待发送消息的应用登记信息,生成与所述待发送消息对应的消息字典,所述应用登记信息包括所述待发送消息的标识信息(如ID号)、名称和所述消息结构体的头文件路径。
参见图2,为本发明实施例中消息接收处理的方法流程图,该方法以通信节点A接收通信节点B发送的消息为例进行说明,该方法包括:
步骤201、通信节点A接收通信节点B发送的消息,并从所述消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息。
步骤202、通信节点A从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息。
步骤203、通信节点A比较所述第一消息字典和第二消息字典的版本,根据比较结果从所述消息中提取应用信息。
上述流程步骤203中,通信节点A根据比较结果从所述消息中提取信息,包括:当所述第一消息字典的版本与所述第二消息字典的版本一致时,通信节点A从所述消息中提取应用数据净荷;当所述第一消息字典的版本与所述第二消息字典的版本不一致时,根据较低版本的所述第一消息字典或所述第二消息字典从所述消息中提取应用信息,如:当所述第一消息字典的版本低于所述第二消息字典的版本时,通信节点A根据所述第一消息字典从所述消息中提取应用信息;当所述第一消息字典的版本高于所述第二消息字典的版本时,通信节点A根据所述第二消息字典从所述消息中提取应用信息。
较佳地,为进一步提高通信节点对接收到的消息进行解析,本发明实施例中,所述第一消息字典和所述第二消息字典均可以设置为用于描述消息的结构体信息的数据结构,且该数据结构包括至少一个用于描述字段信息的子节点。如消息字典由多个子节点构成树状数据结构。消息字典中可包括以下一类或多类子节点:原始类型子节点、原始数组类型子节点、结构体类型子节点和结构体数组型子节点,其中:内存中连续的原始类型成员字段构成的独立子节点为原始类型子节点,原始类型可包括char、unsigned char、short、unsigned short、int、unsigned int、long、unsigned long、float、double、enum、union等;原始类型成员字段的数组构成的独立子节点为原始数组类型子节点;自定义的结构体类型成员字段构成的独立子节点为结构体类型子节点;结构体数组成员字段构成的独立子节点为结构体数组型子节点。
针对原始类型子节点,应用可按照以下尾部追加字段原则对子节点内部信息进行修改:一个原始类型子节点生成之后,后续修改将只能在原始类型子节点尾部新增原始数据类型字段,而禁止对原始类型子节点的已有字段进行删除、修改类型或插入新字段等操作。针对原始数组类型子节点,应用可以增加原始数组类型子节点的数组长度,但是禁止缩小原始数组类型子节点的数组长度。
针对结构体类型子节点和结构体数组类型子节点,应用可对结构体字段本身进行修改,因此需要对结构体类型子节点和结构体数组类型子节点的描述信息进行扩展:将结构体类型子节点和结构体数组类型子节点的内存描述信息作为下一级子节点信息填入消息字典中,依此原则递归计算,直到最末层节点的子节点全部是原始类型子节点或者原始数组类型子节点。针对结构体类型子节点,应用在结构体类型子节点的下级的原始类型子节点末端按照尾部追加字段原则进行修改;针对结构体属组类型子节点,应用既可以修改数组长度,同时也可以在结构体属组类型子节点的下级的原始类型子节点末端按照尾部追加字段原则进行修改。
上述步骤203中,根据所述第一消息字典从所述消息中提取应用信息,具体可包括:针对所述第一消息字典中的每个待解析子节点,判断该待解析子节点与所述第二消息字典中相应子节点是否一致,若一致,则从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;若不一致,则根据所述待解析子节点的类型从所述消息中提取相应的应用信息。根据所述待解析子节点的类型从所述消息中提取相应的应用信息,可如下:当所述待解析子节点为原始类型子节点或原始类型数组型子节点时,根据所述第一消息字典中记录的所述待解析子节点的长度,从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;当所述待解析子节点为结构体类型子节点时,根据所述第一消息字典中记录的所述待解析子节点的长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用;当所述待解析子节点为结构体数组类型子节点时,根据所述第一消息字典中记录的所述待解析子节点的数组长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用。
上述步骤203中,根据所述第二消息字典从所述消息中提取应用信息,具体可包括:针对所述第二消息字典中的每个待解析子节点,判断该待解析子节点与所述第一消息字典中相应子节点是否一致,若一致,则从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;若不一致,则根据所述待解析子节点的类型从所述消息中提取相应的应用信息。根据所述待解析子节点的类型从所述消息中提取相应的应用信息,包括:当所述待解析子节点为原始类型子节点或原始类型数组型子节点时,根据所述第二消息字典中记录的所述待解析子节点的长度,从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;当所述待解析子节点为结构体类型子节点时,根据所述第二消息字典中记录的所述待解析子节点的长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用;当所述待解析子节点为结构体数组类型子节点时,根据所述第二消息字典中记录的所述待解析子节点的数组长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用。
较佳地,上述流程的任意步骤之前或之后,还可包括:
通信节点A在确定需要发送消息时,从本地存储的消息字典库中查找与待发送消息对应的消息字典;通信节点A在所述消息字典库中查找到与所述待发送消息对应的消息字典时,将查找的消息字典设置在所述待发送消息中,并通过消息发送接口发送;以及,通信节点A在所述消息字典库中不能查找到与所述待发送消息对应的消息字典时,通过消息发送接口发送所述待发送消息。
本发明实施例中,消息字典库中存储消息ID号与消息字典的对应关系,当需要从消息字典库中查找相应消息的对应的消息字典时,提取该消息的ID号,并从消息字典库中的对应关系中获取与提取的ID号对应的消息字典。
本发明实施例中,生成消息字典,可采用如图3所示的流程实现。
参见图3,为本发明实施例中生成消息字典的方法流程图,该方法包括:
步骤301、将需要进行消息兼容处理的消息的消息结构体的应用登记信息记录到指定的源文件StructReg.c中,并对该源文件StructReg.c进行编译得到编译文件StructReg.o。
本发明实施例中,将分布式系统中在不同单板间传输的消息确定为需要进行消息兼容处理的消息。该步骤301中,需要进行消息兼容的消息结构体的相关信息,可包括:消息结构体定义的头文件路径、消息ID号和消息结构体本体。
步骤302、对所述编译文件StructReg.o进行解析,从中提取各消息结构体各自对应的全局符号表信息,并对提取的各消息结构体对应的全局符号表信息分别进行整理得到各消息结构体对应的全局符号表调试信息,得到数据文件StructReg.dat。
步骤303、对所述数据文件StructReg.dat中的各消息结构体对应的全局符号表调试信息进行整理,得到各消息对应的可用结构体描述信息。
步骤304、根据StructReg.dat中各消息对应的可用结构体描述信息,生成消息描述字典库源文件MsgMap.c,该字典库源文件MsgMap.c中包含各消息分别对应的消息字典,各消息字典中包括相应的用于描述相应结构体的字段信息的子节点。
本发明实施例中,消息字典包括至少一个子节点,子节点为用于描述消息结构体字段内存分布的数据结构;在定义子节点时,可定义子节点类型、子节点的下一个兄弟子节点的ID号、该子节点所包含的子节点数和子节点所占用的内存大小等,具体可定义如下:
由于对消息结构体的调试信息进行了压缩整合,一个消息结构体所需要的字典信息长度较短,如struct tag_syn_hdr消息结构体的描述信息仅需要两个子节点就即可描述清楚,可采用原始类型子节点和结构体数组类型子节点进行描述,具体可如下:
步骤305、将消息ID及其对应的消息字典关联写入字典库源文件MsgMap.c的消息字典登记表中。
步骤306、对所述字典库源文件MsgMap.c进行编译,得到二进制目标文件MsgMap.o,再将该二进制目标文件MsgMap.o与已有的目标文件TmpProject.o进行链接,生成最终的二进制目标文件Project.o。
参见图4,为本发明实施例中分布式系统中通信节点具体进行消息发送处理的方法流程图,该方法包括:
步骤401、接收消息发送请求,该消息发送请求中携带有待发送消息的ID号。
步骤402、从本地存储的消息字典库的消息字典登记表中,查找是否存在与待发送消息的ID号对应的消息字典登记表条目,若有则执行步骤403,否则执行步骤405。
步骤403、根据查找到的消息字典登记表条目,从消息字典库中获取与所述ID号对应的消息字典,并将该消息字典设置在所述待发送消息中。
该步骤中,可将消息字典设置在待发送消息的头部。
步骤404、调用普通的消息发送接口输出设置有消息字典的所述待发送消息。
步骤405、调用普通的消息发送接口输出所述待发送消息。
较佳地,上述消息发送接口设置为消息兼容处理的通用消息发送接口,发送消息的格式可如下:MsgSendEx(MsgID,MsgBuf,……)。
参见图5,为本发明实施例中分布式系统中通信节点进行消息接收处理的方法流程图,该方法以通信节点B接收通信节点A发送的消息为例进行说明,方法包括:
步骤500、通信节点B接收通信节点B发送的消息。
步骤501、通信节点B从接收到的消息中提取与该消息对应的消息字典A,并根据所述消息的ID号从本地存储的消息字典库中获取与所述消息的ID号对应的消息字典B。
该步骤中,通信节点B先从本地存储的消息字典库的消息字典登记表中,获取与所述消息的ID号对应的消息字典登记表条目,并根据该消息字典登记表条目从消息字典库中获取与所述ID号对应的消息字典B。
步骤502、通信节点B将本地消息缓存清零,以便存储此次对接收到的所述消息进行处理得到的应用信息。
步骤503、通信节点B判断所述消息字典A的版本与所述消息字典B的版本是否一致,若一致则执行步骤504,否则执行步骤505。
步骤504、通信节点B直接从所述消息中提取应用数据净荷,并将提取的应用数据净荷存储至所述本地消息缓存中,并执行步骤522。
步骤505、通信节点B判断所述消息字典A的版本是否低于所述消息字典B的版本,若是则执行步骤506,否则执行步骤514。
步骤506、判断通信节点B是否已经遍历完所述消息字典A中的所有子节点,若否则执行步骤507,否则执行步骤522。
步骤507、判断当前遍历子节点与消息字典B中与该当前遍历子节点相应的子节点是否一致,若一致则执行步骤508,否则执行步骤509。
步骤508、通信节点B根据当前遍历子节点的信息,从所述消息的消息净荷中与所述当前遍历子节点对应位置提取相应的应用信息,并将该应用信息存储至所述本地消息缓存中,并执行步骤506。
步骤509、通信节点B判断所述当前遍历子节点是否为结构体类型子节点或结构体数组类型子节点,若否则执行步骤510,否则执行步骤511。
步骤510、通信节点B确定所述当前遍历子节点为原始类型子节点或原始类型数组子节点,按照所述消息字典A中记录的所述当前遍历子节点的长度,从所述消息的消息净荷中与所述当前遍历子节点对应的位置提取相应的应用信息,并将该应用信息存储至所述本地消息缓存中,并执行步骤506。
较佳地,本发明实施例中,针对原始类型子节点和原始数组类型子节点的修改为尾部新增字段,因此,高版本消息字典B中的原始类型子节点或原始数组类型子节点与低版本消息字典A中相应原始类型子节点和原始数组类型子节点相比,至多就是在子节点尾部新增了字段;因此,通信节点B在根据消息字典A从消息中提取相应的应用信息时,对剩余的字段部分统一填写默认值0。
步骤511、通信节点B判断所述当前遍历子节点是否为结构体类型子节点,若是则执行步骤512,否则执行步骤513。
步骤512、通信节点B根据所述消息字典A中记录的所述当前遍历子节点的长度,对所述当前遍历子节点及其对应的消息部分进行消息兼容处理的递归调用,并执行步骤506。
步骤513、通信节点B根据所述消息字典A中记录的所述当前遍历子节点的数组长度,对所述当前遍历子节点及其对应的消息部分进行消息兼容处理的递归调用,并对剩余的字段部分同一填写默认值0,并执行步骤506。
步骤514、通信节点B是否已经遍历完所述消息字典B中的所有子节点,若是则执行步骤522,否则执行步骤515。
步骤515、判断当前遍历子节点与消息字典A中与该当前遍历子节点相应的子节点是否一致,若一致则执行步骤516,否则执行步骤517。
步骤516、通信节点B根据所述当前遍历子节点的信息,从所述消息的消息净荷中与所述当前遍历子节点对应位置提取相应的应用信息,并将该应用信息存储至本地消息缓存中,并执行步骤522。
步骤517、通信节点B判断所述当前遍历子节点是否为结构体类型子节点或结构体数组类型子节点,若否则执行步骤518,否则执行步骤519。
步骤518、通信节点B确定所述当前遍历的子节点为原始类型子节点或原始类型数组子节点,按照所述消息字典B中记录的所述当前遍历子节点的长度,从所述消息的消息净荷中与所述当前遍历子节点对应的位置提取相应的应用信息,并将该应用信息存储至本地消息缓存中,并对剩余的字段部分同一填写默认值0,并执行步骤514。
步骤519、通信节点B判断所述当前遍历的子节点是否为结构体类型子节点,若是则执行步骤520,否则执行步骤521。
步骤520、通信节点B根据所述消息字典B中记录的所述当前遍历子节点的长度,对所述当前遍历子节点及其对应的消息部分进行消息兼容处理的递归调用,并执行步骤514。
步骤521、通信节点B根据所述消息字典B中记录的所述当前遍历子节点的数组长度,对所述当前遍历子节点及其对应的消息部分进行消息兼容处理的递归调用,并对剩余的字段部分统一填写默认值0,并执行步骤514。
步骤522、通信节点B将本地消息缓存中缓存的应用信息进行整理后,发送给上层应用,并结束流程。
基于前述方法的相同构思,本发明实施例还提供一种消息发送处理装置和一种消息接收处理装置。
参见图6,为本发明实施例中消息发送处理装置的结构示意图,该装置包括:
消息字典获取单元61,用于从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息;
消息发送单元62,用于将所述消息字典获取单元61获取的所述消息字典设置在所述待发送消息中,并发送所述待发送消息。
参见图7,为本发明实施例中消息接收处理装置的结构示意图,该装置包括:
消息字典提取单元71,用于接收消息,并从所述消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息。
消息字典获取单元72,用于从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息。
消息处理单元73,用于比较所述消息字典获取单元72提取得到的第一消息字典与消息字典提取单元71获取的第二消息字典的版本,并根据比较结果从所述消息中提取应用信息。
较佳地,消息处理单元73,具体用于:
当所述第一消息字典的版本与所述第二消息字典的版本一致时,从所述消息中提取应用数据净荷;
当所述第一消息字典的版本与所述第二消息字典的版本不一致时,根据较低版本的所述第一消息字典或所述第二消息字典从所述消息中提取应用信息,如:当所述第一消息字典的版本低于所述第二消息字典的版本时,根据所述第一消息字典从所述消息中提取应用信息;当所述第一消息字典的版本高于所述第二消息字典的版本时,根据所述第二消息字典从所述消息中提取应用信息。
较佳地,所述第一消息字典为用于描述消息的结构体信息的数据结构,且包括至少一个用于描述字段信息的子节点;消息处理单元73根据所述第一消息字典从所述消息中提取应用信息,具体用于:针对所述第一消息字典中的每个待解析子节点,判断该待解析子节点与所述第二消息字典中相应子节点是否一致,若一致,则从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;若不一致,则根据所述待解析子节点的类型从所述消息中提取相应的应用信息。
较佳地,消息处理单元73根据所述待解析子节点的类型从所述消息中提取相应的应用信息,包括:当所述待解析子节点为原始类型子节点或原始类型数组型子节点时,根据所述第一消息字典中记录的所述待解析子节点的长度,从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;当所述待解析子节点为结构体类型子节点时,根据所述第一消息字典中记录的所述待解析子节点的长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用;当所述待解析子节点为结构体数组类型子节点时,根据所述第一消息字典中记录的所述待解析子节点的数组长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用。
较佳地,所述第二消息字典为用于描述消息的结构体信息的数据结构,且包括至少一个用于描述字段信息的子节点;消息处理单元73根据所述第二消息字典从所述消息中提取应用信息,包括:针对所述第二消息字典中的每个待解析子节点,判断该待解析子节点与所述第一消息字典中相应子节点是否一致,若一致,则从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;若不一致,则根据所述待解析子节点的类型从所述消息中提取相应的应用信息。
较佳地,消息处理单元73根据所述待解析子节点的类型从所述消息中提取相应的应用信息,具体用于:当所述待解析子节点为原始类型子节点或原始类型数组型子节点时,根据所述第二消息字典中记录的所述待解析子节点的长度,从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;当所述待解析子节点为结构体类型子节点时,根据所述第二消息字典中记录的所述待解析子节点的长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用;当所述待解析子节点为结构体数组类型子节点时,根据所述第二消息字典中记录的所述待解析子节点的数组长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用。
本发明实施例还提供一种分布式系统中的通信节点,该通信节点可包括图6所示的消息发送处理装置,和/或,包括前述消息接收处理装置。
采用本发明技术方案,在消息中携带有用于描述该消息的结构体信息的消息字典,并且接收端在接收到该消息时,将消息中携带的消息字典与本地存储的与该消息对应的消息字典的版本进行比较,根据比较结果从消息中提取相应的应用信息,从而实现了基于不同软件版本的通信节点之间能够实现消息兼容,从确保分布式系统中基于不同软件版本的通信节点之间能够正确的传递消息。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (10)
1.一种消息发送处理方法,应用于分布式系统,其特征在于,包括:
从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息;
将所述待发送消息对应的消息字典设置在所述待发送消息中,并发送所述待发送消息;
所述消息字典通过以下步骤生成得到:
提取所述待发送消息的消息结构体的全局符号表信息,并根据所述全局符号表信息生成全局符号表调试信息;
根据所述全局符号表调试信息生成至少一个用于描述所述消息结构体的字段信息的子节点;
根据所述至少一个用于描述所述消息结构体的字段信息的子节点和所述待发送消息的应用登记信息,生成与所述待发送消息对应的消息字典,所述应用登记信息包括所述待发送消息的标识信息、名称和所述消息结构体的头文件路径。
2.如权利要求1所述的方法,其特征在于,还包括:生成所述待发送消息对应的消息字典,所述消息字典为用于描述所述待发送消息的结构体信息的数据结构,且包括至少一个用于描述字段信息的子节点。
3.一种消息接收处理方法,应用于分布式系统,其特征在于,包括:
接收消息,并从所述消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息;
从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息;
比较所述第一消息字典和第二消息字典的版本,当所述第一消息字典的版本与所述第二消息字典的版本一致时,从所述消息中提取应用数据净荷;当所述第一消息字典的版本与所述第二消息字典的版本不一致时,根据较低版本的所述第一消息字典或所述第二消息字典从所述消息中提取应用信息。
4.如权利要求3所述的方法,其特征在于,所述第一消息字典和所述第二消息字典均为用于描述消息的结构体信息的数据结构,且分别包括至少一个用于描述字段信息的子节点;
根据所述第一消息字典或所述第二消息字典从所述消息中提取应用信息,包括:
针对所述第一消息字典或所述第二消息字典中的每个待解析子节点,判断该待解析子节点与所述第二消息字典或第一消息字典中相应子节点是否一致,若一致,则从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;若不一致,则根据所述待解析子节点的类型从所述消息中提取相应的应用信息。
5.如权利要求4所述的方法,其特征在于,所述根据所述待解析子节点的类型从所述消息中提取相应的应用信息,包括:
当所述待解析子节点为原始类型子节点或原始类型数组型子节点时,根据所述第一消息字典或第二消息字典中记录的所述待解析子节点的长度,从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;
当所述待解析子节点为结构体类型子节点时,根据所述第一消息字典或第二消息字典中记录的所述待解析子节点的长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用;
当所述待解析子节点为结构体数组类型子节点时,根据所述第一消息字典或第二消息字典中记录的所述待解析子节点的数组长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用。
6.一种消息发送处理装置,其特征在于,包括:
消息字典获取单元,用于从本地存储的消息字典库中查找与待发送消息对应的消息字典,所述消息字典用于描述所述待发送消息的结构体信息;
消息发送单元,用于将所述消息字典获取单元获取的所述消息字典设置在所述待发送消息中,并发送所述待发送消息;
所述消息字典通过以下步骤生成得到:
提取所述待发送消息的消息结构体的全局符号表信息,并根据所述全局符号表信息生成全局符号表调试信息;
根据所述全局符号表调试信息生成至少一个用于描述所述消息结构体的字段信息的子节点;
根据所述至少一个用于描述所述消息结构体的字段信息的子节点和所述待发送消息的应用登记信息,生成与所述待发送消息对应的消息字典,所述应用登记信息包括所述待发送消息的标识信息、名称和所述消息结构体的头文件路径。
7.一种消息接收处理装置,其特征在于,包括:
消息字典提取单元,用于接收消息,并从所述消息中提取第一消息字典,所述第一消息字典用于描述所述消息的结构体信息;
消息字典获取单元,用于从本地存储的消息字典库中获取与所述消息对应的第二消息字典,所述第二消息字典用于描述所述消息的结构体信息;
消息处理单元,用于比较所述消息字典提取单元提取得到的第一消息字典与所述消息字典获取单元获取的第二消息字典的版本,当所述第一消息字典的版本与所述第二消息字典的版本一致时,从所述消息中提取应用数据净荷;当所述第一消息字典的版本与所述第二消息字典的版本不一致时,根据较低版本的所述第一消息字典或所述第二消息字典从所述消息中提取应用信息。
8.如权利要求7所述的装置,其特征在于,所述第一消息字典和所述第二消息字典均为用于描述消息的结构体信息的数据结构,且分别包括至少一个用于描述字段信息的子节点;
消息处理单元根据所述第一消息字典或所述第二消息字典从所述消息中提取应用信息,具体用于:
针对所述第一消息字典或所述第二消息字典中的每个待解析子节点,判断该待解析子节点与所述第二消息字典或第一消息字典中相应子节点是否一致,若一致,则从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;若不一致,则根据所述待解析子节点的类型从所述消息中提取相应的应用信息。
9.如权利要求8所述的装置,其特征在于,所述消息处理单元根据所述待解析子节点的类型从所述消息中提取相应的应用信息,具体用于:
当所述待解析子节点为原始类型子节点或原始类型数组型子节点时,根据所述第一消息字典或第二消息字典中记录的所述待解析子节点的长度,从所述消息的消息净荷中与所述待解析子节点对应的位置提取相应的应用信息;
当所述待解析子节点为结构体类型子节点时,根据所述第一消息字典或第二消息字典中记录的所述待解析子节点的长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用;
当所述待解析子节点为结构体数组类型子节点时,根据所述第一消息字典或第二消息字典中记录的所述待解析子节点的数组长度,对所述待解析子节点及其对应的消息部分进行消息兼容处理的递归调用。
10.一种分布式系统中的通信节点,其特征在于,包括如权利要求6所述的消息发送处理装置,和/或如权利要求7~9任一项所述的消息接收处理装置。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110070754.0A CN102195895B (zh) | 2011-03-23 | 2011-03-23 | 一种消息发送、接收处理的方法及其装置 |
PCT/CN2012/071219 WO2012126301A1 (zh) | 2011-03-23 | 2012-02-16 | 一种消息发送、接收处理的方法及其装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110070754.0A CN102195895B (zh) | 2011-03-23 | 2011-03-23 | 一种消息发送、接收处理的方法及其装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102195895A CN102195895A (zh) | 2011-09-21 |
CN102195895B true CN102195895B (zh) | 2014-12-17 |
Family
ID=44603301
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110070754.0A Active CN102195895B (zh) | 2011-03-23 | 2011-03-23 | 一种消息发送、接收处理的方法及其装置 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN102195895B (zh) |
WO (1) | WO2012126301A1 (zh) |
Families Citing this family (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102195895B (zh) * | 2011-03-23 | 2014-12-17 | 中兴通讯股份有限公司 | 一种消息发送、接收处理的方法及其装置 |
CN102495739B (zh) * | 2011-11-03 | 2017-05-24 | 中兴通讯股份有限公司 | 一种数据的兼容方法、板间消息的兼容方法及相应系统 |
US11080244B2 (en) * | 2014-05-28 | 2021-08-03 | Hewlett Packard Enterprise Development Lp | Inter-version mapping of distributed file systems |
CN105635230B (zh) * | 2014-11-07 | 2018-12-25 | 阿里巴巴集团控股有限公司 | 一种消息传输方法及装置 |
CN105677402B (zh) * | 2015-12-31 | 2019-06-11 | 华为技术有限公司 | 一种消息转换方法和装置 |
CN105893512A (zh) * | 2016-03-30 | 2016-08-24 | 北京忆唐创元文化有限公司 | 一种基于元数据的任意版本兼容数据结构存取方法及装置 |
CN106506331B (zh) * | 2016-10-26 | 2019-10-22 | 宁波菊风系统软件有限公司 | 一种低延迟的文本信息传输方法 |
CN108667710B (zh) * | 2017-03-28 | 2022-03-11 | 腾讯科技(深圳)有限公司 | 一种信息处理方法及设备 |
CN109660577B (zh) * | 2017-10-10 | 2020-10-16 | 中国移动通信有限公司研究院 | 信息传输方法、通信设备及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100440144C (zh) * | 2007-01-26 | 2008-12-03 | 华为技术有限公司 | 实现系统新旧版本兼容的方法及装置 |
CN101901220A (zh) * | 2009-05-27 | 2010-12-01 | 北京启明星辰信息技术股份有限公司 | 一种数据通用显示方法及设备 |
CN101155050B (zh) * | 2006-09-29 | 2011-12-07 | 华为技术有限公司 | 一种处理通知消息的方法、终端、服务器及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102195895B (zh) * | 2011-03-23 | 2014-12-17 | 中兴通讯股份有限公司 | 一种消息发送、接收处理的方法及其装置 |
-
2011
- 2011-03-23 CN CN201110070754.0A patent/CN102195895B/zh active Active
-
2012
- 2012-02-16 WO PCT/CN2012/071219 patent/WO2012126301A1/zh active Application Filing
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101155050B (zh) * | 2006-09-29 | 2011-12-07 | 华为技术有限公司 | 一种处理通知消息的方法、终端、服务器及系统 |
CN100440144C (zh) * | 2007-01-26 | 2008-12-03 | 华为技术有限公司 | 实现系统新旧版本兼容的方法及装置 |
CN101901220A (zh) * | 2009-05-27 | 2010-12-01 | 北京启明星辰信息技术股份有限公司 | 一种数据通用显示方法及设备 |
Also Published As
Publication number | Publication date |
---|---|
CN102195895A (zh) | 2011-09-21 |
WO2012126301A1 (zh) | 2012-09-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102195895B (zh) | 一种消息发送、接收处理的方法及其装置 | |
US7739696B2 (en) | Message translation systems and methods | |
CN104731569B (zh) | 一种数据处理方法及相关设备 | |
CN111683066B (zh) | 异构系统集成方法、装置、计算机设备和存储介质 | |
CN111324619B (zh) | 微服务系统中的对象更新方法、装置、设备和存储介质 | |
CN103729189A (zh) | 基于lua的播放协议转换方法、系统、终端 | |
CN114500633B (zh) | 数据转发方法、相关装置、程序产品及数据传输系统 | |
CN105573956A (zh) | 序列化方法以及基于序列化的网络通信方法 | |
US10579366B2 (en) | Data upgrade framework for distributed systems | |
CN108874985B (zh) | 智能变电站scd文件的分布式解析配置方法 | |
EP1246059B1 (en) | Dynamic interface aggregation on demand | |
CN111159265A (zh) | 一种etl数据迁移方法和系统 | |
CN114356386A (zh) | 一种分块差分升级方法、终端设备和计算机可读存储介质 | |
CN103501238A (zh) | 一种基于SpaceWire的即插即用方法 | |
US20070005552A1 (en) | Methods and systems for reducing transient memory consumption in an object-oriented system | |
CN106484375B (zh) | 一种指令块加载方法、软交换设备及系统 | |
CN111046021B (zh) | 一种物联网型配变终端应用开发平台 | |
CN107404440B (zh) | 一种转发表项发送方法、报文转发方法及装置 | |
CN110795915B (zh) | xml文件批量修改方法、系统、设备和计算机可读存储介质 | |
CN113986312B (zh) | 软件升级方法、装置、电子设备及计算机可读存储介质 | |
CN106648934B (zh) | 一种Impala与HBase之间的高效数据传输方法及系统 | |
CN101504613A (zh) | 用于受限系统的分布式动态二进制翻译方法 | |
CN111586081B (zh) | 一种基于物模型的物联网实现方法 | |
CN114172895A (zh) | 一种路由方法、装置、计算机设备及存储介质 | |
US20050216896A1 (en) | Data communication via tanslation map exchange |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
TR01 | Transfer of patent right |
Effective date of registration: 20200818 Address after: 210012 Nanjing, Yuhuatai District, South Street, Bauhinia Road, No. 68 Patentee after: Nanjing Zhongxing New Software Co.,Ltd. Address before: 518057 Nanshan District Guangdong high tech Industrial Park, South Road, science and technology, ZTE building, Ministry of Justice Patentee before: ZTE Corp. |
|
TR01 | Transfer of patent right |