CN103856396B - 插件间的报文传递方法及装置、代理插件 - Google Patents

插件间的报文传递方法及装置、代理插件 Download PDF

Info

Publication number
CN103856396B
CN103856396B CN201210504699.6A CN201210504699A CN103856396B CN 103856396 B CN103856396 B CN 103856396B CN 201210504699 A CN201210504699 A CN 201210504699A CN 103856396 B CN103856396 B CN 103856396B
Authority
CN
China
Prior art keywords
plug
unit
message
ins
proxy
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
Application number
CN201210504699.6A
Other languages
English (en)
Other versions
CN103856396A (zh
Inventor
张新平
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
ZTE Corp
Original Assignee
ZTE Corp
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ZTE Corp filed Critical ZTE Corp
Priority to CN201210504699.6A priority Critical patent/CN103856396B/zh
Publication of CN103856396A publication Critical patent/CN103856396A/zh
Application granted granted Critical
Publication of CN103856396B publication Critical patent/CN103856396B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Computer And Data Communications (AREA)

Abstract

本发明提供一种插件间的报文传递方法及装置、代理插件,属于通信领域。其中,插件间的报文传递方法包括:报文传递装置接收第一插件发送的请求调用第二插件的消息;报文传递装置将第二插件信息返回给第一插件,以便第一插件调用第二插件。其中,报文传递装置将第二插件信息返回给第一插件包括:所述报文传递装置确定所述第二插件对应的代理插件;所述报文传递装置将所述代理插件返回给所述第一插件,以便所述第一插件通过所述代理插件调用所述第二插件。本发明的技术方案能够通过适当处理参数而提高插件间的报文处理效率。

Description

插件间的报文传递方法及装置、代理插件
技术领域
本发明涉及通信领域,特别是指一种插件间的报文传递方法及装置、代理插件。
背景技术
在大型软件开发中,为了方便对软件进行功能扩展,实现模块内高内聚,模块间低耦合的特性,实现发布软件功能的可定制性,往往采用插件式开发,将一个个功能封装在插件中实现,插件可以通过其id查找,插件对应的二进制实体可能是动态链接库和jar包等,往往这些插件可能会有多种类型,即遵循的插件接口不一样,而为了处理上的方便,这些不同的接口可以派生于同一个基础接口。一个系统往往包括多个进程,每个进程中又含有多个插件,这些插件在进程内可能成树形管理部署,任何两个插件间可能会有报文传递,在传递过程中可能会涉及多个别的中间插件,从调用关系看是一个有向网。一般的报文有报文头和报文体,报文头是含命令的通用信息,如含有命令码(或者命令串)、序列号、类型(区分请求、应答、通知等报文类型)、方向(从客户端到服务器的方向称为下,从服务器到客户端方向称为上)等信息。报文体是命令对应的具体信息。
在综合型的网管中要管理各种专业网产品,而每种专业网产品拥有很多种设备。而各专业网有自己的特性,不同设备之间存在差异。网管往往采用C/S结构,Server侧根据专业网和功能分为多个进程、分布式管理。每个进程内含有功能各异的插件,各插件呈树形方式管理。不同的插件间存在进程内或跨进程的交互。
传统的插件接口如果进程内和进程间是统一的,则由于进程间需要通过socket等形式传递,必须先编码成码流,才能在两个插件间传递,接收插件接收到码流,再解码处理,无法直接传递结构,统一的接口形式要求进程内两个插件报文传递也需要编码和解码过程,从而导致报文传输效率较低。
发明内容
本发明要解决的技术问题是提供一种插件间的报文传递方法及装置、代理插件,能够提高插件间的报文传输效率。
为解决上述技术问题,本发明的实施例提供技术方案如下:
一方面,提供一种插件间的报文传递方法,包括:
报文传递装置接收第一插件发送的请求调用第二插件的消息;
所述报文传递装置将所述第二插件信息返回给所述第一插件,以便所述第一插件调用所述第二插件。
进一步地,上述方案中,所述报文传递装置将所述第二插件信息返回给所述第一插件包括:
所述报文传递装置确定所述第二插件对应的代理插件;
所述报文传递装置将所述代理插件返回给所述第一插件,以便所述第一插件通过所述代理插件调用所述第二插件。
进一步地,上述方案中,所述报文传递装置确定对应所述第二插件对应的代理插件包括:
所述报文传递装置判断所述第二插件与所述第一插件是否属于同一进程;
在所述第二插件与所述第一插件属于同一进程时,所述报文传递装置创建一本地代理插件作为所述第二插件的代理插件;
在所述第二插件与所述第一插件不属于同一进程时,所述报文传递装置确定所述第二插件所属的进程,并创建一远程代理插件作为所述第二插件的代理插件。
本发明实施例还提供了一种插件间的报文传递方法,包括:
代理插件接收第一插件发送的请求报文,所述请求报文请求获取第二插件数据;
所述代理插件将所述请求报文发送给所述第二插件,并接收所述第二插件返回的携带有应答数据的响应报文;
所述代理插件将所述响应报文返回给所述第一插件,以便所述第一插件对所述响应报文解析得到应答数据。
进一步地,上述方案中,所述请求报文为采用函数virtual CMsgAny*Get(CMsgAny& anymsg,CMsgHead& headinfo)或virtual void Set(CMsgAny &anymsg,CMsgHead &headinfo),其中参数anymsg为报文体,参数headinfo为报文头信息;
CMsgAny包括两个字段,一为报文码流指针字段anyBuf,另一个为报文结构指针字段value。
进一步地,上述方案中,在所述第二插件与所述第一插件属于同一进程时,所述代理插件将所述请求报文发送给所述第二插件包括:
所述代理插件不对所述请求报文进行编码,直接将所述请求报文发送给所述第二插件;
所述代理插件将所述响应报文返回给所述第一插件包括:
所述代理插件不对所述响应报文进行编码,直接将所述响应报文发送给所述第一插件。
进一步地,上述方案中,在所述第二插件与所述第一插件不属于同一进程时,所述代理插件将所述请求报文发送给所述第二插件包括:
所述代理插件对所述请求报文中的数据以及所述第二插件的信息进行编码;
所述代理插件将编码后的码流发送给所述第二插件所属进程,由所述进程将码流发送给所述第二插件。
进一步地,上述方案中,所述代理插件将所述请求报文发送给所述第二插件包括:
所述代理插件将所述请求报文中的参数anymsg编码为buf1,并将所述第二插件的信息、参数headinfo和buf1化为一个码流发送给所述第二插件所属进程,由所述进程将码流发送给所述第二插件。
进一步地,上述方案中,所述第二插件调用函数GetPDataFromAny解析参数anymsg。
进一步地,上述方案中,所述接收所述第二插件返回的携带有应答数据的响应报文包括:
接收由第二插件所属进程返回的携带有应答数据的响应报文。
进一步地,上述方案中,所述第一插件调用函数GetPDataFromAny解析响应报文。
本发明实施例还提供了一种插件间的报文传递装置,包括:
接收模块,用于接收第一插件发送的请求调用第二插件的消息;
发送模块,用于将所述第二插件信息返回给所述第一插件,以便所述第一插件调用所述第二插件。
进一步地,上述方案中,所述装置还包括:
插件管理模块,用于存储不同进程的插件信息,通过插件标识确定其对应插件,并确定插件所属进程。
进一步地,上述方案中,所述装置还包括:
插件分布式信息模块,用于存储其他进程的插件信息;
报文处理框架模块,用于在不同进程间发送和接收码流;
所述插件管理模块具体用于根据自身以及所述插件分布式信息模块存储的插件信息确定对应所述第二插件对应的代理插件。
本发明的实施例具有以下有益效果:
上述方案中,报文传递装置接收到第一插件的请求调用第二插件的消息后,将第二插件的代理插件返回给第一插件,第一插件可以通过代理插件传递报文至第二插件,第一插件不需要知道第二插件是否和它在同一个进程中,只需要将报文发送给代理插件即可完成对第二插件的调用,提高了插件间的报文传递效率。
附图说明
图1为ESNAC C++基本类结构继承体系的结构示意图;
图2为本发明实施例构造的Get参数anymsg报文的结构示意图;
图3为本发明实施例进程B插件y接收到的Get参数anymsg报文的结构示意图;
图4为本发明实施例同进程插件y给插件x的Get返回值报文的结构示意图;
图5为本发明实施例插件x调用同进程插件y的Get的处理流程示意图;
图6为本发明实施例进程A插件x调用进程B插件y的Get的处理流程示意图;
图7为本发明实施例SNACC4J中Asn1Any的数据成员obj_type可能的取值。
具体实施方式
为使本发明的实施例要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明的实施例针对现有技术中插件间报文传输效率较低的问题,提供一种插件间的报文传递方法及装置、代理插件,能够提高插件间的报文传输效率。
本发明实施例提供了一种插件间的报文传递方法,包括:
报文传递装置接收第一插件发送的请求调用第二插件的消息;
报文传递装置将第二插件信息返回给第一插件,以便第一插件调用第二插件。
其中,报文传递装置将第二插件信息返回给第一插件包括:
该报文传递装置确定该第二插件对应的代理插件;
该报文传递装置将该代理插件返回给该第一插件,以便该第一插件通过该代理插件调用该第二插件。
进一步地,该报文传递装置确定对应该第二插件对应的代理插件包括:
该报文传递装置判断该第二插件与该第一插件是否属于同一进程;
在该第二插件与该第一插件属于同一进程时,该报文传递装置创建一本地代理插件作为该第二插件的代理插件;
在该第二插件与该第一插件不属于同一进程时,该报文传递装置确定该第二插件所属的进程,并创建一远程代理插件作为该第二插件的代理插件。
本发明实施例还提供了一种插件间的报文传递方法,包括:
代理插件接收第一插件发送的请求报文,所述请求报文请求获取第二插件数据;
所述代理插件将所述请求报文发送给所述第二插件,并接收所述第二插件返回的携带有应答数据的响应报文;
所述代理插件将所述响应报文返回给所述第一插件,以便所述第一插件对所述响应报文解析得到应答数据。
所述请求报文为采用函数virtual CMsgAny*Get(CMsgAny &anymsg,CMsgHead&headinfo)或virtual void Set(CMsgAny &anymsg,CMsgHead& headinfo),其中参数anymsg为报文体,参数headinfo为报文头信息;
CMsgAny包括两个字段,一为报文码流指针字段anyBuf,另一个为报文结构指针字段value。
其中,在第一插件和第二插件属于同一个进程时,由于第一插件、代理插件和第二插件的参数及返回值形式完全一样,代理插件接收第一插件发送的请求直接传递给第二插件作为数据的请求报文;该代理插件将该请求报文发送给该第二插件,并接收该第二插件返回的携带有应答数据的响应报文;代理插件将该响应报文返回给该第一插件,以便该第一插件对该响应报文解析得到应答数据。
这样在第一插件和第二插件属于同一个进程时,不需要对报文进行编解码,能够提高插件间的报文传输效率。
进一步地,在该第二插件与该第一插件不属于同一进程时,该代理插件将该请求报文发送给该第二插件包括:
该代理插件对该请求报文中的数据以及该第二插件的信息进行编码;
该代理插件将编码后的码流发送给该第二插件所属进程,由该进程将码流发送给该第二插件。
进一步地,该该代理插件将该请求报文发送给该第二插件包括:
该代理插件将该请求报文中的参数anymsg编码为buf1,并将该第二插件的信息、参数headinfo和buf1转化为一个码流发送给该第二插件所属进程,由该进程将码流发送给该第二插件。
进一步地,该接收该第二插件返回的携带有所请求数据的响应报文包括:
该代理插件在该第二插件根据该码流中的buf1构造出参数anymsg后,接收该第二插件对参数anymsg解析后返回的响应报文。
进一步地,该第二插件调用函数GetPDataFromAny解析参数anymsg。
之后,第一插件在接收到代理插件的响应报文时,调用预设的解码模板(如GetPDataFromAny函数)对该响应报文解析得到所请求数据。
本发明实施例还提供了一种插件间的报文传递装置,包括:
接收模块,用于接收第一插件发送的请求调用第二插件的消息;
发送模块,用于将所述第二插件信息返回给所述第一插件,以便所述第一插件调用所述第二插件。
该装置还包括:
插件管理模块,用于存储不同进程的插件信息,通过插件标识确定其对应插件,并确定插件所属进程。
进一步地,该装置还包括:
插件分布式信息模块,用于存储其他进程的插件信息;
报文处理框架模块,用于在不同进程间发送和接收码流;
该插件管理模块具体用于根据自身以及该插件分布式信息模块存储的插件信息确定对应该第二插件对应的代理插件。
上述实施例中,报文传递装置接收到第一插件的请求调用第二插件的消息后,将第二插件的代理插件返回给第一插件,第一插件可以通过代理插件传递报文至第二插件,第一插件不需要知道第二插件是否和它在同一个进程中,只需要将报文发送给代理插件即可完成对第二插件的调用,提高了插件间的报文传递效率。
下面结合图1-图7对本发明的插件间的报文传递方法进行详细介绍:
本发明的技术方案中,首先定义程序基础扩展点接口及派生此的功能接口,如localservice,servant,service等各种插件类型,其中localservice只为进程内其它插件提供所需功能,而servant可以为本进程和其它进程提供服务功能,service是servant的代理,如果进程B中插件x要访问进程A中的servant类型的插件y,则进程B内要提供一个service类型插件z充当插件y的代理。如果进程A和进程B是同一个进程,则插件x可以通过代理service访问插件y,也可以直接访问servant。Service可以知道自己是进程内的代理还是进程外插件的代理。
本发明的插件间的报文传递装置包括有:
插件管理模块,负责本进程的插件部署和加载,并且具有插件查找功能,能判断一个插件是否在本进程内;
插件分布式信息模块,登记管理其它进程的插件的信息;
报文处理框架模块,负责维护和其它进程的连接,在不同进程间发送和接收报文的码流。
本发明中,参数和返回值形式有两种:一种是基于报文的,其参数和返回值的对应的类型是可以通过编码形成码流的,这种方法适用于跨进程调用;另外一种是基于非报文的,主要提供给进程内其它插件调用。本发明主要针对基于报文的方法。
插件接口中基于报文的方法,主要有virtual CMsgAny*Get(CMsgAny &anymsg,CMsgHead& headinfo),virtual void Set(CMsgAny &anymsg,CMsgHead& headinfo)。其中,Get是有应答报文的函数,anymsg为报文体,headinfo是含有命令码和用户等报文头信息;Set是无应答报文的函数。
其中类型CMsgAny含有两个数据字段,一个字段是码流对应的类型CMsgBufmsgbuf,另一个是码流对应的结构字段value,value采用所有报文结构的基类CMsgType的指针类型,value缺省为NULL。CMsgAny也是CMsgType的派生类,而value中可能含有类型为CMsgAny字段的多层嵌套。一个CMsgType的派生类型的报文结构实例可以编码转化为CMsgBuf数据。
图1为ESNACC C++基本类结构继承体系,AsnType是所有ASN.1报文结构的C++基类,ASN.1的类型ANY在ESNACC对应为AsnAny,它主要有两个字段,一个报文码流字段AsnBuf*anyBuf,一个报文结构字段AsnType*value。这两个字段在编码时不能同时为NULL。在此实施例中技术方案提及的CMsgType就是AsnType,CMsgAny就是AsnAny。
在插件x要调用插件y前,首先通过插件管理模块获取插件y的代理z,如果本进程中存在插件y,返回插件y的本地代理z指针;如果本进程不存在插件y,则在插件分布式信息模块查找插件y,存在就返回插件y的远程代理z的指针,不存在就返回NULL。
图5所示为插件x调用同进程插件y的Get的处理过程,如果代理z是本地的,则代理z直接通过插件y指针,将参数直接传递并调用插件y的Get方法,插件y通过template<CMsgConcreteType>GetPDataFromAny(anymsg,t)来访问t的数据成员并且把返回值直接返回给插件x。其中,插件x通过代理插件z来调用插件y的Get方法,其中参数和返回值在两个Get调用间都是直接传递的,未经过任何变化。参数是按图2所示的结构构造的,返回值是按照图4所示的结构构造的。进一步地,插件x还可以不通过代理,直接调用插件y,插件x直接构造函数,调用Get(anymsg,headinfo),插件y通过template<CMsgConcreteType>GetPDataFromAny(anymsg,t)来访问t的数据成员并且把返回值直接返回给插件x。
图6所示为进程A插件x调用进程B插件y的Get的处理过程,先按照图2说明构造anymsg,当代理z接收到Get调用后,由于代理z是远程代理,anymsg就要进行编码,编码为buf1,并且将x的插件id等辅助信息、headinfo、buf1序列化为一个码流,通过本进程的报文处理框架模块发送给插件y所在进程B,进程B的报文处理框架模块接收到报文,分拆码流,解码辅助信息和headinfo,并将anymsg的码流放到CMsgAny的字段msgbuf中,进程B的报文处理框架模块获得插件y指针并调用它的Get方法,插件y通过template<CMsgConcreteType>GetPDataFromAny(anymsg,t)来访问t的数据成员,Get结束后按图4说明构造返回报文给报文处理框架模块,其编码后添加辅助信息返回给进程A,在进程A的报文处理框架模块分拆报文,构造AsnAny作为Get返回值给插件x,在插件x用GetPDataFromAny解析返回值,解析过程类似图3解析anymsg。
图2所示为构造的Get参数anymsg报文,其中,anymsg的value指向AtomCommand结构,AtomCommand结构嵌套了一个类型为AsnyAny的字段cmdBuf,cmdBuf的value指向ObjCood结构。所有AsnAny的anyBuf指针为NULL。
图3为进程B插件y接收到的Get参数anymsg报文,在经过跨进程传递后anymsg中anyBuf有值,而value为NULL。这样插件y第一次调用GetPDataFromAny解析anymsg,用类型AtomCommand解码anyBuf,之后anymsg.value有值不为NULL。B22的子节点B31的anyBuf此时有值,子节点B31的value为NULL,插件y第二次调用GetPDataFromAny解析B22,用类型ObjCood解码anyBuf,经此处理后子节点B31的value也有值。如果插件y把anymsg再传递给同进程其它插件w,就不用再解码,而可以直接访问有值的value。
图4为同进程插件y给插件x的Get返回值报文,返回值类似图3也存在AsnAny类型两层嵌套,第一层对应报文结构类型AtomCommand,第二层对应报文结构类型ObjInfo。通常根据命令码确定第一层的的报文结构类型,根据objectNameList的内容,确定第二层报文结构类型。更简单的做法,第一层报文结构都是一样的,根据命令码和objectNameList的内容,确定第二层报文结构类型。
在上述方案中,可以根据预存的编码模板和解码模板进行编码和解码,具体地,编码模板可以采用CMsgBuf*encode(CMsgType& msg);解码模板可以采用template<typenameCMsgConcreteType>
bool decode(CMsgBuf*msgbuf,CMsgConcreteType*& pmsg),msgbuf解码为具体类型为CMsgConcreteType的指针msg,如果为空返回假,且pmsg为NULL。
另外还可以从any获取指定类型数据的模板template<typenameCMsgConcreteType>
bool GetPDataFromAny(CMsgAny &any,CMsgConcreteType*&t)。先判断any.value是否为NULL,如果不为NULL,把any.value传给t;如果为NULL,用类型CMsgConcreteType创建实例t,解码any.msgbuf,且把t赋值给any.value.一般应用插件对CMsgAny数据都是通过此函数获取具体报文结构实例t。对于存在多层嵌套CMsgAny的数据,都可以在需要时用GetPDataFromAny逐层获取对应的报文结构实例。关于t一般要求是只读的,不修改其中内容,这样如果这个报文在多个插件中传递时,都能确保用的是原始应答内容。这样的好处:一.any如果来自本进程内,其中的any.value不为NULL,而any.anyBuf为NULL,这样应用直接获取相应的value指针,不会有编码和解码,效率提高。二.any如果来自其它进程内,其中的any.value为NULL,而any.anyBuf不为NULL,这样应用解码any.anyBuf的后赋值给value指针,这样本进程中只要解码过一次,就不会再解码,效率提高。
为any设置数据的方法bool SetPDataToAny(CMsgAny &any,CMsgConcreteType*t)就是把t赋值给any.value。插件x要获得插件y的Get方法返回值,通过template<CMsgConcreteType>GetPDataFromAny(anymsg,ret)来访问ret的数据成员。Set方法除了没有返回值的处理,其它类似。
下面结合一个统一网管的实现来说明该报文传递方法。
(一)网管部署
网管采用c/s结构,服务器采用多进程分布式部署,每个进程内有多个插件,采用插件式开发。每个网管进程的插件管理模块在启动时根据本进程部署文件加载其管理的IServant类型的插件,这样通过插件分布式信息模块可以知道某插件在哪个进程中。当然也可以每个进程根据部署文件不加载,IServant类型的插件只是预先做个登记,在有功能用到此插件时按需加载。
(二)网管报文
网管主要采用asn.1报文,c++进程采用ESNACC作为处理工具,java进程采用SNACC4j工具。
(三)实施例用到的ASN.1结构定义
技术方案中提及CMsgType对应于AsnType,CMsgAny对应于AsnAny,最外围报文结构AtomCommand,
其ASN.1定义如下,附带定义后面用到的ASN.1结构ObjCood、ErrorInfo。
(四)实施例用到的C结构定义
1.IServant是一个服务接口,可以对本进程或远程进程提供服务,服务提供主要通过Get、Set来实现:
virtual AsnAny*Get(AsnAny& anymsg,AdditionInfo& headinfo)
virtual void Set(AsnAny & anymsg,AdditionInfo& headinfo)
PreInit设置上下文,Get是有应答报文的函数,CMsg报文,headinfo命令码和用户等报文头信息。Set是无应答报文的函数。
2.IService是IServant的本地或远程代理,客户通过IService实现对IServant的Get,Set的调用。函数原型定义为
virtual AsnAny*Get(AsnAny& msgbuf,AdditionInfo& headinfo)
virtual void Set(AsnAny& msgbuf,AdditionInfo& headinfo)。
3.插件x要调用插件y的Get方法前,先根据功能构造报文anymsg、headinfo。可能的一种命令报文实现anymsg如图2,headinfo中对应的命令码m_lCmdcode为2503。
4.插件x要调用插件y的Get方法,之后如果代理z为本地,将按图5处理过程进行。如果代理z为远程,将按图6处理过程进行。
5.对于没有返回值的Set方法,处理过程类似于Get方法处理过程,只是没有返回值的处理。
如对于SNACC4j,SNACC4J中报文结构的类分两种:一种是几种基本类型,如图7,采用java的原始类型;另一种除了这几种外的基于Asn1Type派生的类。我们采用了一种变形处理,ASN1Type相当于ESNACC的AsnType。Asn.1类型ANY对应Asn1Any结构,Asn1Any增加两个字段java.lang.Objectvalue和int obj_type,相当于ESNACC的AsnAny类。其中obj_type取值范围如图7,它们是定义Asn1Any中的常量值。且在类Asn1Any中增加函数
对于非Asn1Type的派生类作额外单独处理,而对于Asn1Type的派生类作统一处理。GetPDataFromAny一个函数变多个函数,对于非Asn1Type的派生类作专门函数单独处理,如对BOOLEAN做函数public static booleanGetBooleanFromAny(ASN1 Any any)单独处理,而对于Asn1Type的派生类采用反射方式做变形处理public static ASN1 TypeGetPDataFromAny(java.lang.Classjcls,ASN1 Any asnData),其中jcls是返回值对应报文结构的类对象。别的函数也作类似处理。
本发明在软件支持分布式部署和插件机制的基础上,统一了进程内和进程间插件接口方法参数的信息,并且的插件间报文传递处理是高效的。在同进程的插件间传递,发送方不需要编码,接收方不需要再解码;进程间传递时,如果接收此报文插件有多个(比如父插件接收后要传递给多个子插件),第一个接收插件解码过,此接收进程内的其它插件就不会再解码。并且报文的发送方插件不需要事先知道接收报文的插件是否和它在同一个进程中,提高了插件间的报文传递效率。
应当理解的是,对本领域普通技术人员来说,可以根据本发明的技术方案的说明和具体实施方式做出各种可能的改变或替换,接口添加和减少一些方法,方法的名称和类型的改变,参数个数的添加或减少,类似SNACC4j的变形处理,甚至用过程语言的结构及函数指针实现接口。
此说明书中所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方式的独立性。
本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地位于一起,而是可以包括存储在不同物理上的不同的指令,当这些指令逻辑上结合在一起时,其构成模块并且实现该模块的规定目的。
实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上(包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于系统或网络上。
在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
在本发明各方法实施例中,所述各步骤的序号并不能用于限定各步骤的先后顺序,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,对各步骤的先后变化也在本发明的保护范围之内。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (13)

1.一种插件间的报文传递方法,其特征在于,包括:
报文传递装置接收第一插件发送的请求调用第二插件的消息;
所述报文传递装置将所述第二插件信息返回给所述第一插件,以便所述第一插件调用所述第二插件,包括:所述报文传递装置确定所述第二插件对应的代理插件;所述报文传递装置将所述代理插件返回给所述第一插件,以便所述第一插件通过所述代理插件调用所述第二插件。
2.根据权利要求1所述的插件间的报文传递方法,其特征在于,所述报文传递装置确定对应所述第二插件对应的代理插件包括:
所述报文传递装置判断所述第二插件与所述第一插件是否属于同一进程;
在所述第二插件与所述第一插件属于同一进程时,所述报文传递装置创建一本地代理插件作为所述第二插件的代理插件;
在所述第二插件与所述第一插件不属于同一进程时,所述报文传递装置确定所述第二插件所属的进程,并创建一远程代理插件作为所述第二插件的代理插件。
3.一种插件间的报文传递方法,其特征在于,包括:
代理插件接收第一插件发送的请求报文,所述请求报文请求获取第二插件数据;
所述代理插件将所述请求报文发送给所述第二插件,并接收所述第二插件返回的携带有应答数据的响应报文;
所述代理插件将所述响应报文返回给所述第一插件,以便所述第一插件对所述响应报文解析得到应答数据。
4.根据权利要求3所述的插件间的报文传递方法,其特征在于,所述请求报文为采用函数virtual CMsgAny*Get(CMsgAny&anymsg,CMsgHead&headinfo)或virtual void Set(CMsgAny&anymsg,CMsgHead&headinfo),其中参数anymsg为报文体,参数headinfo为报文头信息;
CMsgAny包括两个字段,一为报文码流指针字段anyBuf,另一个为报文结构指针字段value。
5.根据权利要求4所述的插件间的报文传递方法,其特征在于,在所述第二插件与所述第一插件属于同一进程时,所述代理插件将所述请求报文发送给所述第二插件包括:
所述代理插件不对所述请求报文进行编码,直接将所述请求报文发送给所述第二插件;
所述代理插件将所述响应报文返回给所述第一插件包括:
所述代理插件不对所述响应报文进行编码,直接将所述响应报文发送给所述第一插件。
6.根据权利要求4所述的插件间的报文传递方法,其特征在于,在所述第二插件与所述第一插件不属于同一进程时,所述代理插件将所述请求报文发送给所述第二插件包括:
所述代理插件对所述请求报文中的数据以及所述第二插件的信息进行编码;
所述代理插件将编码后的码流发送给所述第二插件所属进程,由所述进程将码流发送给所述第二插件。
7.根据权利要求6所述的插件间的报文传递方法,其特征在于,所述代理插件将所述请求报文发送给所述第二插件包括:
所述代理插件将所述请求报文中的参数anymsg编码为buf1,并将所述第二插件的信息、参数headinfo和buf1化为一个码流发送给所述第二插件所属进程,由所述进程将码流发送给所述第二插件。
8.根据权利要求7所述的插件间的报文传递方法,其特征在于,
所述第二插件调用函数GetPDataFromAny解析参数anymsg。
9.根据权利要求6所述的插件间的报文传递方法,其特征在于,所述接收所述第二插件返回的携带有应答数据的响应报文包括:
接收由第二插件所属进程返回的携带有应答数据的响应报文。
10.根据权利要求7所述的插件间的报文传递方法,其特征在于,所述第一插件调用函数GetPDataFromAny解析响应报文。
11.一种插件间的报文传递装置,其特征在于,包括:
接收模块,用于接收第一插件发送的请求调用第二插件的消息;
发送模块,用于将所述第二插件信息返回给所述第一插件,以便所述第一插件调用所述第二插件,包括:确定所述第二插件对应的代理插件;将所述代理插件返回给所述第一插件,以便所述第一插件通过所述代理插件调用所述第二插件。
12.根据权利要求11所述的插件间的报文传递装置,其特征在于,所述装置还包括:
插件管理模块,用于存储不同进程的插件信息,通过插件标识确定其对应插件,并确定插件所属进程。
13.根据权利要求12所述的插件间的报文传递装置,其特征在于,所述装置还包括:
插件分布式信息模块,用于存储其他进程的插件信息;
报文处理框架模块,用于在不同进程间发送和接收码流;
所述插件管理模块具体用于根据自身以及所述插件分布式信息模块存储的插件信息确定对应所述第二插件对应的代理插件。
CN201210504699.6A 2012-11-30 2012-11-30 插件间的报文传递方法及装置、代理插件 Active CN103856396B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210504699.6A CN103856396B (zh) 2012-11-30 2012-11-30 插件间的报文传递方法及装置、代理插件

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210504699.6A CN103856396B (zh) 2012-11-30 2012-11-30 插件间的报文传递方法及装置、代理插件

Publications (2)

Publication Number Publication Date
CN103856396A CN103856396A (zh) 2014-06-11
CN103856396B true CN103856396B (zh) 2017-05-31

Family

ID=50863632

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210504699.6A Active CN103856396B (zh) 2012-11-30 2012-11-30 插件间的报文传递方法及装置、代理插件

Country Status (1)

Country Link
CN (1) CN103856396B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105656760B (zh) * 2016-01-08 2019-01-25 华自科技股份有限公司 软件插件之间的通信方法及系统
CN108829502B (zh) * 2018-06-21 2021-11-23 北京奇虎科技有限公司 线程操作的实现方法和装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101464805A (zh) * 2008-12-24 2009-06-24 中兴通讯股份有限公司 一种插件管理方法及其系统
CN101571811A (zh) * 2009-05-22 2009-11-04 中兴通讯股份有限公司 一种信息传输方法及装置
CN101937353A (zh) * 2010-09-20 2011-01-05 中兴通讯股份有限公司 一种插件部署和加载的方法及装置
CN102037710A (zh) * 2008-05-19 2011-04-27 思杰系统有限公司 用于远程处理多媒体插件调用的方法和系统
CN102591724A (zh) * 2011-12-28 2012-07-18 奇智软件(北京)有限公司 消息交互方法及装置

Family Cites Families (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8095625B2 (en) * 2007-02-28 2012-01-10 Red Hat, Inc. Directory server plug-in call ordering
CN101359289A (zh) * 2008-09-10 2009-02-04 金蝶软件(中国)有限公司 企业资源规划行业插件开发的方法、装置和系统
CN102402455A (zh) * 2010-09-14 2012-04-04 北大方正集团有限公司 调用动态链接库的方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102037710A (zh) * 2008-05-19 2011-04-27 思杰系统有限公司 用于远程处理多媒体插件调用的方法和系统
CN101464805A (zh) * 2008-12-24 2009-06-24 中兴通讯股份有限公司 一种插件管理方法及其系统
CN101571811A (zh) * 2009-05-22 2009-11-04 中兴通讯股份有限公司 一种信息传输方法及装置
CN101937353A (zh) * 2010-09-20 2011-01-05 中兴通讯股份有限公司 一种插件部署和加载的方法及装置
CN102591724A (zh) * 2011-12-28 2012-07-18 奇智软件(北京)有限公司 消息交互方法及装置

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
插件式企业综合通信客户端平台研究与设计;何震苇;《中国优秀硕士学位论文全文数据库 信息科技辑》;20111215;正文第5章 *

Also Published As

Publication number Publication date
CN103856396A (zh) 2014-06-11

Similar Documents

Publication Publication Date Title
JP5052522B2 (ja) ウェブ・サービス通信の履歴を駆使した最適化のためのシステム及び方法
US8375094B2 (en) Creating a message readable by a plurality of heterogeneous recipients
US7962925B2 (en) System and method for XML data binding
ES2326073T3 (es) Sistema y metodo para tratar o procesar documentos en lenguaje de marcaje extensible (xml).
CN100389572C (zh) 一种远程调用通信组件的系统及方法
US20100083281A1 (en) System and method for processing messages using a common interface platform supporting multiple pluggable data formats in a service-oriented pipeline architecture
van Engelen Code generation techniques for developing light-weight xml web services for embedded devices
CN101807205B (zh) 用于处理xml数据的处理模块、设备和方法
US8015218B2 (en) Method for compressing/decompressing structure documents
US8375399B2 (en) Method, apparatus and computer program to perform dynamic selection of serialization processing schemes
US6711740B1 (en) Generic code book compression for XML based application programming interfaces
US20080271055A1 (en) Protocol for communication of data structures
CN103856396B (zh) 插件间的报文传递方法及装置、代理插件
Mundy et al. An XML alternative for performance and security: ASN. 1
CN108183890B (zh) 一种数据通信协议的解析方法及系统
US20050091405A1 (en) Method and system for using multiple data type representations to deliver data objects to components in a distributed system
Lu et al. Building a generic SOAP framework over binary XML
CN101699914A (zh) 移动终端中的上行及下行业务数据处理方法、及相关装置
WO2006110987A1 (en) System and method for efficient hosting of wireless applications by encoding application component definitions
CN100589358C (zh) 处理消息的方法和系统以及消息发送端和消息接收端
Jander et al. Compact and efficient agent messaging
Werner et al. XML compression for web services on resource-constrained devices
JP4830558B2 (ja) 構造化文書符号化装置および構造化文書復号化装置
Käbisch Resource Optimization of SOA-Technologies in Embedded Networks
US7587719B2 (en) Method and apparatus for combining extended markup language and key/value pairs into the format of an interprocess message payload

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant