CN101753540A - 一种发送复杂消息的方法 - Google Patents
一种发送复杂消息的方法 Download PDFInfo
- Publication number
- CN101753540A CN101753540A CN200810227934A CN200810227934A CN101753540A CN 101753540 A CN101753540 A CN 101753540A CN 200810227934 A CN200810227934 A CN 200810227934A CN 200810227934 A CN200810227934 A CN 200810227934A CN 101753540 A CN101753540 A CN 101753540A
- Authority
- CN
- China
- Prior art keywords
- dimensional message
- dimensional
- data pointer
- message packet
- buffering area
- 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.)
- Pending
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Exchanges In Wide-Area Networks (AREA)
Abstract
本发明公开了一种发送复杂消息的方法,该方法包括:在缓冲区上为待发送的立体消息动态分配内存;将所述立体消息里的数据指针转化为立体消息报文缓冲区内的偏移后,发送所述立体消息报文。采用本发明,不仅能实现立体消息报文的发送,而且消息表达简单,避免了消息表达异构导致的一系列问题。
Description
技术领域
本发明涉及发送复杂消息的技术,尤其涉及一种在进程间发送复杂消息的方法。
背景技术
在通信领域的系统实现中,进程间通信实际上就是在进程间发送消息,而发送消息的具体实现通常是:将消息以消息报文的形式封装后,在进程间发送该消息报文。由于进程之间的独立性,发送消息报文的过程都可抽象为将消息报文从源缓存区拷贝到目的缓存区的过程,如图1所示,可直观得出发送消息报文过程的抽象。然而,对于含有数据指针的复杂消息,由于该复杂消息中既包括了数据指针本身,又包括了数据指针所引用的数据,因此,仍然采用上述将消息报文从源缓存区拷贝到目的缓存区的简单拷贝操作,将只拷贝了数据指针本身,而未拷贝指针所引用的数据,从而导致该复杂消息发送失败。
为了便于描述,以下将含有一个或多个数据指针的复杂消息简称为立体消息。立体消息以含有一个或多个数据指针为核心特征,如图2所示,可直观看出立体消息的这一核心特征。一个数据指针还可以被包含在被其他数据指针所引用的一数据块里。针对立体消息而言,必须首先将立体消息封装为可发送的消息报文后,才能进行发送。将通过对立体消息施加处理而得到的可以发送的消息报文简称为立体消息报文。
现有技术中,采用静态平面化技术获得立体消息报文是:将立体消息中的数据指针本体转化为固定长度的字节序列,也就是将以指针数据结构描述的数据指针本体转化为以数组数据结构描述的数组,使数据指针本体和数据指针本体所引用的数据全部驻留在立体消息里。
现有技术存在的缺陷是:由于系统中需设置两套数据结构,即指针数据结构和数组数据结构,因此会导致消息表达异构的问题。而消息表达异构,随之会带来一系列问题,比如内存拷贝次数增加;内存分配冗余;内存分配冗余导致的内存拷贝量增加;系统效率运行低下以及系统设计复杂度增加等。
发明内容
有鉴于此,本发明的主要目的在于提供一种发送复杂消息的方法,不仅能实现立体消息报文的发送,而且消息表达简单,避免了消息表达异构导致的一系列问题。
为达到上述目的,本发明的技术方案是这样实现的:
一种发送复杂消息的方法,该方法包括:
在缓冲区上为待发送的立体消息动态分配内存;
将所述立体消息里的数据指针转化为立体消息报文缓冲区内的偏移后,发送所述立体消息报文。
其中,所述发送立体消息报文后还包括:将立体消息报文缓冲区内的偏移转化为本地数据指针。
其中,所述动态分配内存为动态连续地分配内存,并实现内存分配冗余为零;
在发送端,所述在缓冲区上为待发送的立体消息动态分配内存进一步包括:
为所述立体消息中的数据指针动态连续地分配内存,以及为立体消息中数据指针所引用的数据动态连续地分配内存。
其中,所述缓冲区的长度的计算公式为:
其中,Lb为缓冲区的长度;Lm为所述立体消息报文的主体的长度;N为所述立体消息中含有的数据指针的总个数;Ln为第n的数据指针所引用的数据的长度。
其中,所述为立体消息中的数据指针动态连续地分配内存,以及为立体消息中数据指针所引用的数据动态连续地分配内存具体包括:
A1、通过划分所述Lm长度的内存,在所述缓冲区上为所述立体消息报文的主体分配内存,记录所述立体消息报文的指针为P;根据L=Lm计算出当前立体消息报文的总长度值;其中,L为所述立体消息报文的当前的总长度;
A2、从所述缓冲区的内存的P+L位置开始,采取以下公式为Pn::P划分Ln长度的内存,实现内存的动态连续分配;
[Pn::P]=[P]+L;
所述公式中,Pn::P表示所述P中的第n个数据指针;[Pn::P]表示访问以Pn::P的值为地址的内存单元的内容;[P]表示访问以P的值为地址的内存单元的内容;
A3、缓存L值;同时根据Ln的值更新L值:
L=L+Ln;
公式中,Ln表示该数据指针引用数据的长度。
其中,所述将立体消息里的数据指针转化为立体消息报文缓冲区内的偏移之前还包括:
记录所述Pn::P在所述缓冲区内的偏移Ipn,以及所述Pn::P引用的数据在缓冲区内的偏移In;其中,所述In为所述步骤A3中缓存操作对应的L值,并在对所述L值的缓存操作中,完成对In的记录;所述Ipn采取以下公式获得:
Ipn=(#Pn::P)-P;
公式中,(#Pn::P)表示取存放Pn::P的内存地址。
其中,所述将立体消息里的数据指针转化为立体消息报文缓冲区内的偏移具体为:
根据所述In和所述Ipn获得序列(Ipn,In);将所述序列(Ipn,In)中的In值写入相对应的Ipn所引用的内存,实现所述转换,采取以下公式获得:
[P+Ipn]=In;
公式中,[P+Ipn]表示访问以P+Ipn的值为地址的内存单元的内容。
其中,所述将立体消息报文缓冲区内的偏移转化为本地数据指针具体采取以下公式获得:
[#Pn::P]=P+Pn::P;
其中,[#Pn::P]表示访问以#Pn::P的值为地址的内存单元的内容;#Pn::P表示取存放Pn::P的内存地址。
在发送端本发明动态连续分配数据块;本发明区别于现有技术,是对立体消息进行动态平面化后获得立体消息报文,即为:将立体消息里的数据指针转化为立体消息报文缓冲区内的偏移,从而将业务应用层定义的、满足业务应用层需要的立体消息转化为满足立体消息发送需要的立体消息报文。由于数据指针和将数据指针转化后生成的偏移都是以指针数据结构描述的,因此,为了同时满足业务应用层需要和立体消息发送需要,这种转化不存在消息表达异构,从而避免了消息表达异构所导致的一系列问题。在接收端,本发明区别于现有技术,无需专门在系统中设计转换模块,而是对立体消息报文进行立体化后获得立体消息,即为:接收端接收到发送端发送的立体消息报文,将立体消息报文缓冲区内的偏移转化为本地数据指针,来快速获得业务应用层需要的立体消息。其中,动态平面化实际上是立体消息里的数据指针与立体消息报文里的偏移之间的变换,而立体化实际上立体消息里的数据指针与立体消息报文里的偏移之间的逆变换。
综上所述,本发明通过立体消息里的数据指针与立体消息报文里偏移之间的变换与逆变换技术,以及获得立体消息报文里偏移的新技术,实现立体消息与立体消息报文的动态转换,完成立体消息报文的发送与接收。不仅能实现立体消息报文的发送,而且本发明消息表达简单,使用一套数据结构即指针数据结构描述即可,无需像现有技术那样维护两套数据结构,消除了消息表达异构。从而避免了消息表达异构导致的一系列问题,比如内存拷贝次数/内存拷贝量的增加和系统设计复杂度增加等。而且,本发明采用数据块动态连续分配的技术,能更好地消除内存冗余分配,降低系统对内存的需求,使进程间消息流量显著降低。
附图说明
图1为消息报文发送的通用示意图;
图2为具有一个或多个数据指针的立体消息的示意图;
图3为应用现有静态平面化技术得到的立体消息报文的示意图;
图4为静态平面化后产生的内存冗余的示意图;
图5为应用本发明动态平面化技术得到立体消息报文的示意图;
图6是应用本发明动态平面化和立体化技术的整个过程的示意图;
图7为本发明方法的实现流程示意图。
具体实施方式
本发明的基本思想是:通过立体消息里的数据指针与立体消息报文里偏移之间的变换与逆变换技术,以及获得立体消息报文里偏移的新技术,实现立体消息与立体消息报文的动态转换,完成立体消息报文的发送与接收。
下面结合附图对技术方案的实施作进一步的详细描述。
以下将现有技术和本发明进行对比阐述,以更好地体现本发明相对于现有技术的优点。
就现有技术而言,在现有技术中,获得立体消息报文的方法采用静态平面化技术。具体来说,将立体消息中的数据指针本体转化为固定长度的字节序列,也就是将以指针数据结构描述的数据指针本体转化为以数组数据结构描述的数组,然后将数据指针本体所引用的数据放入转化生成的数组中。从而,让数据指针本体和数据指针本体所引用的数据全部驻留在立体消息里。那么通过对立体消息施加上述静态平面化的处理,就形成了可发送的立体消息报文。采用静态平面化技术得到的立体消息报文如图3所示。图4为静态平面化后产生的内存冗余的示意图,图4中,阴影填充的部分代表当前使用的内存,空白的部分代表冗余分配的内存。
现有技术存在的缺点包括以下几个方面。
第一方面、采用现有技术会导致消息表达异构。原因在于:在业务应用层,也就是实际操作时使用的立体消息表达方式是:数据指针本体加数据指针本体所引用的数据;而在进程间通信发送立体消息时需要采用立体消息报文,也就是说包含数据指针本体的立体消息是不可以直接发送的,为了实现立体消息的发送需要将数据指针本体转化为数组,那么在进程间通信发送立体消息时使用的立体消息表达方式是:由对数据指针本体转化生成的数组加原数据指针本体所引用的数据。由于数据指针本体是以指针这种数据结构描述的,而数组是采用另一种数据结构,即以数组数据结构描述的。因此,为了适应同一条立体消息在业务应用层操作和立体消息发送的不同需要,系统内将定义两种类型的数据结构,从而系统在读/写等操作过程中,要根据当前需要选择使用其中一个数据结构表达的立体消息,带来操作混乱。
而且,消息表达异构会进一步产生额外的内存拷贝次数的开销。原因在于:通常的拷贝操作指:消息报文发送过程中的数据拷贝操作。也就是说,将消息报文直接拷贝到系统中即可。而针对消息表达异构的立体消息而言,由于为了立体消息的发送定义了数组这种额外的数据结构,因此立体消息的拷贝操作为:先将原数据指针本体所引用的数据拷贝到数组中,再将数组拷贝到系统中。也就是说,立体消息的拷贝操作额外增加了由立体消息到采用静态平面化技术所获得的立体消息报文的拷贝过程,然后才执行上述通常的拷贝操作。
第二方面、采用现有技术会导致内存分配冗余和内存拷贝量增加的问题。原因在于:针对内存分配冗余而言,对数据指针本体转化生成的数组通常不是按照实际需要定义的,也就是说,预先定义时并不知道实际数据长度,数组是按照最大数据长度来统一定义的。那么,在业务应用层面的立体消息里,以数据指针和实际数据长度来表示的数据,为了满足立体消息发送的需要,将数据指针转化成数组后,都被最大化的分配在静态平面化后的立体消息报文主体里。从而,导致经静态平面化后的立体消息报文的结构会非常大,按照最大数据长度来统一定义数组并分配内存,必然导致内存分配冗余。针对内存拷贝量增加而言,由于按照最大数据长度来统一定义数组并分配内存,内存冗余,因此,在每一次执行拷贝操作时也是按照最大数据长度执行拷贝,而不是按照实际数据长度执行拷贝。也就是说,内存冗余导致每次都要拷贝最大化的数据,使内存拷贝量增加。
第三方面、采用现有技术会导致效率低下的问题。原因在于:内存冗余造成内存拷贝量的增加,以及由于消息表达异构而造成的内存拷贝次数的增加均造成系统开销很大,从而导致系统效率运行低下。
第四方面、采用现有技术会导致对报文访问的操作复杂,从而带来系统设计复杂度增加的问题。原因在于:由于采用静态平面化技术获得的立体消息报文存在消息表达异构的问题,因此,立体消息的接收方不能直接使用接收到的立体消息报文,而必须通过转换模块,将立体消息报文中的数组转换成数据指针,以满足业务应用层的需要,这样势必增加系统设计的复杂度。
本发明应运而生,解决了现有技术存在的上述四方面问题。应用本发明动态平面化技术得到立体消息报文的布局如图5所示。应用本发明动态平面化和立体化技术,来发送与接收立体消息报文的过程如图6所示,图6中,发送端的立体消息的业务数据表示即为:满足业务应用层需求、包含数据指针和数据指针所引用的数据的立体消息,动态平面化后的立体消息即为:在发送端对该立体消息经过动态平面化技术处理后获得的立体消息报文。
本发明消息表达简单,使用一套数据结构即指针数据结构描述即可。无需像现有技术那样,专门为了实现立体消息报文的发送定义额外的数据结构即数组数据结构,维护两套数据结构,可见采用本发明消除了消息表达异构,从而避免了消息表达异构导致的一系列问题。
具体来说,本发明通过立体消息里的数据指针与立体消息报文里偏移之间的变换与逆变换技术,使消息的表达方式简便,消除了消息表达异构。并采用封装全部本地数据指针与缓冲区偏移之间的变换操作的手段,使系统接收端直接根据缓冲区偏移,经逆变换获得本地数据指针,而无需像现有技术那样,专门在接收端设计转换模块。可见,采用本发明,消除消息表达异构的同时,极大地降低了系统设计的复杂度。消除消息表达异构的同时,本发明基于可靠的数据块动态连续分配技术来分别分配立体消息报文中数据指针本体所占的内存,以及数据指针本体所引用数据块所占的内存。这种对内存的二次动态连续分配技术,是按照实际数据长度进行的动态分配,区别于现有技术是按照最大数据长度统一预先分配的方式。可见,采用本发明使得内存分配冗余降为0,大大提高了内存的使用率。当内存分配冗余降为0时,立体消息报文发送过程中的内存拷贝的长度降至最短,内存拷贝次数和内存拷贝量都大幅度减少,从而大大提高了系统运行效率。
以下对本发明所采用的发送复杂消息的方法进行具体阐述。
如图7所示,一种发送复杂消息的方法,该方法包括以下步骤:
步骤101、在缓冲区上为待发送的立体消息动态分配内存。
步骤102、将该立体消息里的数据指针转化为立体消息报文缓冲区内的偏移后,发送该立体消息报文。
这里,在发送端将该立体消息里的数据指针转化为立体消息报文缓冲区内的偏移的处理可称为动态平面化处理过程。通过对立体消息的动态平面化处理,实现了将符合业务应用层需要的立体消息转化为符合立体消息发送需要的立体消息报文。当在发送端对立体消息采取动态平面化处理获得立体消息报文后,发送该立体消息报文;当接收端收到该立体消息报文后,步骤102后还包括:
步骤201、将立体消息报文缓冲区内的偏移转化为本地数据指针。
这里,在接收端将立体消息报文缓冲区内的偏移转化为本地数据指针的处理可称为立体化处理过程。通过对立体消息报文的立体化处理,实现了将符合立体消息发送需要的立体消息报文转化为业务应用层需要的立体消息。
以下对上述步骤的技术实现进行细化并具体阐述上述步骤实现的技术细节。
其中,步骤101中,该缓冲区的长度的计算公式为:其中,Lb为缓冲区的长度;Lm为所述立体消息报文的主体的长度;N为所述立体消息中含有的数据指针的总个数;Ln为第n的数据指针所引用的数据的长度。而且,步骤101中,动态分配内存为动态连续地分配内存,并实现内存分配冗余为零。那么,步骤101进一步包括:
步骤1011、为立体消息中的数据指针动态连续地分配内存,以及为立体消息中数据指针所引用的数据动态连续地分配内存。
这里,步骤1011的具体处理过程包括:
步骤1011a、通过划分所述Lm长度的内存,在所述缓冲区上为所述立体消息报文的主体分配内存,记录所述立体消息报文的指针为P;根据L=Lm计算出当前立体消息报文的总长度值;其中,L为所述立体消息报文的当前的总长度。
这里,针对L而言,随着为立体消息里的多个指针,依次动态分配内存的进行,L的值将被及时的缓存和更新。并且,缓存L的值是为了获得后续步骤102a中描述的In。
步骤1011b、从缓冲区的内存的P+L位置开始,采取以下公式(1)为Pn::P划分Ln长度的内存,实现内存的动态连续分配。这里的Ln表示该数据指针引用数据的长度。
[Pn::P]=[P]+L (1)
公式(1)中,Pn::P表示所述P中的第n个数据指针;[Pn::P]表示访问以Pn::P 的值为地址的内存单元的内容;[P]表示访问以P的值为地址的内存单元的内容。
步骤1011c、缓存L值;同时根据Ln的值采用公式L=L+Ln来更新L值。公式中的Ln表示该数据指针引用数据的长度。
其中,步骤102之前还包括计算缓冲区的偏移的步骤,具体为:
步骤102a、记录所述Pn::P在所述缓冲区内的偏移Ipn,以及所述Pn::P引用的数据在缓冲区内的偏移In;其中,所述In为上述步骤1011c中缓存操作对应的L值,而非更新操作对应的L值,并在对缓存操作对应的L值的缓存操作中,完成对In的记录;所述Ipn采取以下公式(2)获得:
Ipn=(#Pn::P)-P (2)
公式(2)中,(#Pn::P)表示取存放Pn::P的内存地址。
其中,步骤102的具体处理过程为:
根据所述In和所述Ipn获得序列(Ipn,In);将所述序列(Ipn,In)中的In值写入相对应的Ipn所引用的内存,实现所述转换,采取以下公式(3)获得:
[P+Ipn]=In (3)
公式(3)中,[P+Ipn]表示访问以P+Ipn的值为地址的内存单元的内容。
其中,步骤201的具体处理过程为:将立体消息报文缓冲区内的偏移转化为本地数据指针具体采取以下公式(4)获得:
[#Pn::P]=P+Pn::P (4)
公式(4)中,[#Pn::P]表示访问以#Pn::P的值为地址的内存单元的内容;#Pn::P表示取存放Pn::P的内存地址。
结合实际应用,对实现发送端的动态平面化处理过程的原理,以及接收端的立体化过程的原理进行阐述。
针对发送端的动态平面化处理过程而言,包括以下步骤:
步骤301、获得发送缓冲区。
步骤302、在该缓冲区上为待发送的立体消息报文的主体分配内存,记录该立体消息报文的指针为P。
这里需要指出的是,由于需要将立体消息处理成立体消息报文后才可以发送,因此需要预先对立体消息报文进行内存分配和构造。
步骤303、在发送缓冲区上构建要发送的立体消息报文主体。
步骤304、在发送缓冲区上,为立体消息报文主体里的数据指针动态分配连续的内存。
步骤305、构建立体消息报文主体里的数据指针所指向的数据。
步骤306、重复步骤304和步骤305,直到立体消息报文主体里的数据指针全部处理完成。
步骤307、将立体消息报文主体里的数据指针值转化为缓冲区内的偏移值。
步骤308、计算经动态平面化后获得的立体消息报文的总长度,记录为L。
步骤309、将立体消息报文的指针P,和经动态平面化后获得的立体消息报文的总长度L这两个立体消息报文发送的参数进行封装,发送立体消息报文。
针对接收端的立体化处理过程而言,包括以下步骤:
步骤401、获得接收到的立体消息报文的缓冲区,并提取出P和L。
步骤402、转化立体消息报文里的缓冲区偏移为本地数据指针。
这里,由于在立体消息发送时,采用了封装全部本地数据指针与缓冲区偏移之间变换与逆变换的操作这一技术手段,因此,根据P以及提取出该变换操作的具体实现,使系统接收端直接根据缓冲区偏移,经逆变换获得本地数据指针。
步骤403、重复执行步骤402,直到立体消息报文主体里的数据指针全部处理完成,结束执行。
以下举例对本发明的方法进行阐述。本发明的方法实施例包括:发送端的动态平面化处理过程,以及接收端的立体化处理过程两方面的内容。
针对发送端的动态平面化处理过程而言,发送端的动态平面化处理过程包括以下步骤:
公式中,Lb为缓冲区的长度;Lm为所述立体消息报文的主体的长度;N为立体消息中含有的数据指针的总个数;Ln为第n的数据指针所引用的数据的长度。Lb、Lm、N和Ln均为整数。这里,Lm和N可以直接由表达立体消息报文的数据结构获得,Ln为运行期的业务赋值。
这里需要指出的是,由于处理器的对齐原因,如果需要S字节对齐,则Ln应该以通过公式(5)获得,即取对齐值Ln′代替Ln。
Ln′=(Ln+S-1)/S (5)
公式(5)中,S为对齐值,取1,2,4,8,16中任一个即可。
步骤502、通过划分Lm长度的内存,在所述缓冲区上为立体消息报文的主体分配内存,记录立体消息报文的指针为P,则相当于得到缓冲区上的立体消息。根据L=Lm计算出当前立体消息报文的总长度值;其中,L为立体消息报文的总长度。
这里需要指出的是,由于需要将立体消息处理成立体消息报文后才可以发送,因此需要预先对立体消息报文进行内存分配和构造。
步骤503、为立体消息报文的指针P赋值。
步骤504、从缓冲区的内存的P+L位置开始,采取上述公式(1)为Pn::P划分Ln长度的内存,实现内存的动态连续分配。
这里,由于步骤504里采用上述公式(1)实现了内存的动态连续分配,因此,消除了内存冗余分配,可使内存冗余分配降低到零。从而降低了系统对内存的需求,使进程间消息流量显著降低。
步骤505、记录Pn::P在缓冲区内的偏移Ipn,以及Pn::P引用的数据在缓冲区内的偏移In;其中,In即为L;Ipn采取上述公式(2)获得;采用公式L=L+Ln,计算出当前立体消息报文的总长度值,更新立体消息报文的总长度L。
这里,步骤505所采用的算法,即上述公式(2),能保证可靠的获得数据指针自身的偏移,从而为后续步骤508,对立体消息报文主体里的数据指针转化为缓冲区偏移的转换提供了可靠保证。
步骤506、为Pn所引用的数据赋值。
步骤507、重复步骤504、步骤505和步骤506,直到立体消息报文主体里的数据指针全部处理完成。
这里,步骤507定义了一个循环处理过程。如果被处理的立体消息里包含如图2所示的P2-1类型的数据指针,即在一个被数据指针所引用的数据里包含的数据指针,可简称次级数据指针,则要保证该次级数据指针被处理时,引用此次级数据指针所在的数据块的数据指针,可简称初级数据指针已经被处理完毕。处理完毕意味着已经执行完步骤504、步骤505和步骤506。
这里,步骤507完成时,得到一个Ipn和In的序列(Ipn,In),n∈[1,N]。
步骤508、将序列(Ipn,In)中的In值写入相对应的Ipn所引用的内存,实现这种转换,采取上述公式(3)获得。
这里,通过步骤508的转换,就完成了立体消息报文主体里的数据指针转化为缓冲区偏移。
步骤509、计算立体消息经动态平面化后获得的立体消息报文的总长度为L。
步骤510、以立体消息报文的指针P和经动态平面化后获得的立体消息报文的总长度L发送立体消息报文。
针对接收端的立体化处理过程而言,接收端的立体化处理过程包括以下步骤:
步骤601、获得接收到的立体消息报文的指针为P。通常,P是收到的立体消息报文的数据指针。
步骤602、以上述公式(4)转化立体消息报文里的缓冲区偏移为本地数据指针。
步骤603、重复步骤602,直到立体消息报文主体里的数据指针全部处理完成,结束执行。
在具体实施过程中,将发送端的平面化过程和接收端的立体化过程封装为两组例程供业务应用层使用。
在发送端,以GetFrame()例程实现内存的动态连续分配,以YieldMessage()最终完成动态平面化转换并返回动态平面化后立体消息报文的长度,以提供发送时必须的消息长度参数。
在接收端,以PopFrame()例程转换动态平面化后立体消息报文缓冲区内的偏移为指针,实现对接收到的动态平面化后的立体消息报文进行的立体化。
发送端的GetFrame()例程替代语言库提供的malloc()或new()等例程,保证业务应用层对待发送立体立体消息进行正确的内存分配。并内部处理所有转换准备信息。在使用YieldMessage()之前,业务应用层可以按照立体消息的定义自由操作、访问该立体消息。在使用YieldMessage()之后,业务应用层可直接发送该消息。
使用以上例程实现本发明,使业务应用层在获得使用本发明所获得的收益的同时,又不必关心立体消息的转换过程及其具体细节,极大的简化了业务应用层发送立体消息的过程,同时,可以获得由于例程对具体操作的封装所带来的安全性保证。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (8)
1.一种发送复杂消息的方法,其特征在于,该方法包括:
在缓冲区上为待发送的立体消息动态分配内存;
将所述立体消息里的数据指针转化为立体消息报文缓冲区内的偏移后,发送所述立体消息报文。
2.根据权利要求1所述的方法,其特征在于,所述发送立体消息报文后还包括:将立体消息报文缓冲区内的偏移转化为本地数据指针。
3.根据权利要求1或2所述的方法,其特征在于,所述动态分配内存为动态连续地分配内存,并实现内存分配冗余为零;
在发送端,所述在缓冲区上为待发送的立体消息动态分配内存进一步包括:
为所述立体消息中的数据指针动态连续地分配内存,以及为立体消息中数据指针所引用的数据动态连续地分配内存。
4.根据权利要求3所述的方法,其特征在于,所述缓冲区的长度的计算公式为:
其中,Lb为缓冲区的长度;Lm为所述立体消息报文的主体的长度;N为所述立体消息中含有的数据指针的总个数;Ln为第n的数据指针所引用的数据的长度。
5.根据权利要求4所述的方法,其特征在于,所述为立体消息中的数据指针动态连续地分配内存,以及为立体消息中数据指针所引用的数据动态连续地分配内存具体包括:
A1、通过划分所述Lm长度的内存,在所述缓冲区上为所述立体消息报文的主体分配内存,记录所述立体消息报文的指针为P;根据L=Lm计算出当前立体消息报文的总长度值;其中,L为所述立体消息报文的当前的总长度;
A2、从所述缓冲区的内存的P+L位置开始,采取以下公式为Pn::P划分Ln长度的内存,实现内存的动态连续分配;
[Pn::P]=[P]+L;
所述公式中,Pn::P表示所述P中的第n个数据指针;[Pn::P]表示访问以Pn::P的值为地址的内存单元的内容;[P]表示访问以P的值为地址的内存单元的内容;
A3、缓存L值;同时根据Ln的值更新L值:
L=L+Ln;
公式中,Ln表示该数据指针引用数据的长度。
6.根据权利要求5所述的方法,其特征在于,所述将立体消息里的数据指针转化为立体消息报文缓冲区内的偏移之前还包括:
记录所述Pn::P在所述缓冲区内的偏移Ipn,以及所述Pn::P引用的数据在缓冲区内的偏移In;其中,所述In为所述步骤A3中缓存操作对应的L值,并在对所述L值的缓存操作中,完成对In的记录;所述Ipn采取以下公式获得:
Ipn=(#Pn::P)-P;
公式中,(#Pn::P)表示取存放Pn::P的内存地址。
7.根据权利要求6所述的方法,其特征在于,所述将立体消息里的数据指针转化为立体消息报文缓冲区内的偏移具体为:
根据所述In和所述Ipn获得序列(Ipn,In);将所述序列(Ipn,In)中的In值写入相对应的Ipn所引用的内存,实现所述转换,采取以下公式获得:
[P+Ipn]=In;
公式中,[P+Ipn]表示访问以P+Ipn的值为地址的内存单元的内容。
8.根据权利要求7所述的方法,其特征在于,所述将立体消息报文缓冲区内的偏移转化为本地数据指针具体采取以下公式获得:
[#Pn::P]=P+Pn::P;
其中,[#Pn::P]表示访问以#Pn::P的值为地址的内存单元的内容;#Pn::P表示取存放Pn::P的内存地址。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810227934A CN101753540A (zh) | 2008-12-02 | 2008-12-02 | 一种发送复杂消息的方法 |
PCT/CN2009/074390 WO2010063198A1 (zh) | 2008-12-02 | 2009-10-10 | 一种发送复杂消息的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN200810227934A CN101753540A (zh) | 2008-12-02 | 2008-12-02 | 一种发送复杂消息的方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101753540A true CN101753540A (zh) | 2010-06-23 |
Family
ID=42232884
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200810227934A Pending CN101753540A (zh) | 2008-12-02 | 2008-12-02 | 一种发送复杂消息的方法 |
Country Status (2)
Country | Link |
---|---|
CN (1) | CN101753540A (zh) |
WO (1) | WO2010063198A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105068878A (zh) * | 2015-07-30 | 2015-11-18 | 汉柏科技有限公司 | 进程间的通信方法及系统 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1924817A (zh) * | 2006-09-15 | 2007-03-07 | 华为技术有限公司 | 一种数据结构传输方法 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6738917B2 (en) * | 2001-01-03 | 2004-05-18 | Alliance Semiconductor Corporation | Low latency synchronization of asynchronous data |
US6741603B2 (en) * | 2001-07-09 | 2004-05-25 | Overture Networks, Inc. | Use of a circular buffer to assure in-order delivery of packets |
CN100360318C (zh) * | 2005-01-31 | 2008-01-09 | 北京北大方正电子有限公司 | 一种能够提高内存利用率的打印内存管理方法 |
US20070300267A1 (en) * | 2006-06-23 | 2007-12-27 | Sony Ericsson Mobile Communications Ab | Method and apparatus to facilitate multimedia transfer |
-
2008
- 2008-12-02 CN CN200810227934A patent/CN101753540A/zh active Pending
-
2009
- 2009-10-10 WO PCT/CN2009/074390 patent/WO2010063198A1/zh active Application Filing
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1924817A (zh) * | 2006-09-15 | 2007-03-07 | 华为技术有限公司 | 一种数据结构传输方法 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105068878A (zh) * | 2015-07-30 | 2015-11-18 | 汉柏科技有限公司 | 进程间的通信方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
WO2010063198A1 (zh) | 2010-06-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN100403739C (zh) | 基于链表的进程间消息传递方法 | |
US9405574B2 (en) | System and method for transmitting complex structures based on a shared memory queue | |
CN102209104B (zh) | 减小通信协议中的分组大小 | |
US8276154B2 (en) | Hash partitioning streamed data | |
CN105978985B (zh) | 一种用户态RPC over RDMA的内存管理方法 | |
CN102999522B (zh) | 一种数据存储方法和装置 | |
US11354050B2 (en) | Data processing method, apparatus, and computing device | |
CN101188544A (zh) | 分布式文件服务器基于缓冲区的文件传输方法 | |
CN104866430B (zh) | 结合主从备份和纠删码的内存计算系统高可用优化方法 | |
CN113900810A (zh) | 分布式图处理方法、系统及存储介质 | |
CN102566958B (zh) | 一种基于sgdma的图像分割处理装置 | |
US10073648B2 (en) | Repartitioning data in a distributed computing system | |
US20220236908A1 (en) | Method, electronic device and computer program product for processing data | |
EP2235637B1 (en) | Hierarchical block-identified data communication for unified handling of structured data and data compression | |
US9380127B2 (en) | Distributed caching and cache analysis | |
CN104572498A (zh) | 报文的缓存管理方法和装置 | |
JP2017501492A (ja) | インフィニバンド(IB)上で仮想ホストバスアダプタ(vHBA)を管理およびサポートするためのシステムおよび方法、ならびに単一の外部メモリインターフェイスを用いてバッファの効率的な使用をサポートするためのシステムおよび方法 | |
CN101753540A (zh) | 一种发送复杂消息的方法 | |
CN114077507A (zh) | 一种应用于远程过程调用系统的零拷贝序列化方法 | |
CN111797497A (zh) | 一种用于电磁暂态并行仿真的通讯方法及系统 | |
CN103646015A (zh) | 发送、接收以及传输xml报文的方法和系统 | |
US9256380B1 (en) | Apparatus and method for packet memory datapath processing in high bandwidth packet processing devices | |
CN104580009B (zh) | 芯片转发数据的方法及装置 | |
CN106021121B (zh) | 用以优化分组缓冲器空间的分组处理系统、方法和设备 | |
CN111416872A (zh) | 基于mp和rdma的高速缓存文件系统通信方法及系统 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |
Application publication date: 20100623 |