??xml version="1.0" encoding="utf-8" standalone="yes"?>欧美午夜视频,亚洲伊人伊成久久人综合网,99re6这里只有精品http://www.aygfsteel.com/chgaowei/category/42125.html思考、分享、交、进步——ؓ了自q、公司的、中国的、世界的软g技?/description>zh-cnMon, 12 Oct 2009 12:32:51 GMTMon, 12 Oct 2009 12:32:51 GMT60构徏自己的C/C++插g开发框Ӟ四)——核心层设计和实现http://www.aygfsteel.com/chgaowei/archive/2009/10/12/297970.html帔R?/dc:creator>帔R?/author>Mon, 12 Oct 2009 12:20:00 GMThttp://www.aygfsteel.com/chgaowei/archive/2009/10/12/297970.htmlhttp://www.aygfsteel.com/chgaowei/comments/297970.htmlhttp://www.aygfsteel.com/chgaowei/archive/2009/10/12/297970.html#Feedback0http://www.aygfsteel.com/chgaowei/comments/commentRss/297970.htmlhttp://www.aygfsteel.com/chgaowei/services/trackbacks/297970.html上面一文章大致描qC一下插件开发框架整体结构。这描qC下核心层的设计和实现?

至于核心层的设计Q我惛_鉴 一下微内核的思想。核心层只负责实C面几个功能:

1?插g的加载,,初始化?

2?服务的注册?

3?服务的调用?

4?服务的管理?

插g的加载,,初始?

插g的加载利用linux׃n库的动态加载技术。具体的Ҏ可以看一下IBM|站的一资?a >《Linux 动态库剖析?/a> ?

服务的注?/strong>

服务的注册与调用采用表驱动的Ҏ。核心层中维护一个服务注册表?

//插g间交互消息类?br>typedef enum __Service_Type
{
    Service_Max,
}Service_Type;
//插g用于和其他插仉信接口函数Q由插g提供?br>typedef PRsp_Ele_Stream (*PF_Invoke_Service_Func)(PReq_Ele_Stream pele_str);
//驱动?br>typedef PF_Invoke_Service_Func Service_Drive_Table[Service_Max];

驱动表是一个数l,下标为插仉交互消息cdQ成员ؓ插g提供的接收的消息处理函数Q由插g初始化的时候,调用插g框架的的注册函数注册到驱动表?

插g的初始化实现为:
//插g用于注册处理的消息类型的函数Q由插g框架提供?br>typedef RET_RESULT (*PF_Service_Register_Func)(Service_Type service_type);
//插g用于和其他插仉信接口函数Q由插g框架提供?br>typedef PRsp_Ele_Stream (*PF_Invoke_Service_Func)(PReq_Ele_Stream pele_str);
//插g回复响应函数。插件收到异步请求后Q处理完成后Q发送响应消息给h的插件。由插g框架提供
typedef void (*PF_Send_Response_Func)(PRsp_Ele_Stream pele_str);
//初始化插件信?br>typedef struct Plugin_Init_St
{
    PF_Service_Register_Func register_func;//服务注册函数Q要注册一pd的枚丑ր{插件可以处理的服务枚D?br>    PF_Invoke_Service_Func invoke_serv_func;//和其他组件交互时Q调用的用于和其他组件交互的函数。发送请求消息?br>    PF_Send_Response_Func send_rsp_func;//再设计一个回复响应消息的接口。收到异步请求后Q处理完毕后通知h模块处理l果?br>} Plugin_Init_St, *PPlugin_Init_St;
//初始化插件函敎ͼcM于构造函数。由插g提供Q供插g框架加蝲插g时初始化插g使用?br>void PF_Init_Plugin(PPlugin_Init_St pinit_info);

      插g在函数PF_Init_Plugin中调用函数register_func来注册插件要处理的消息类型?

服务的调?/strong>
//信元l构?br>typedef struct Ele_St
{
    Ele_Tag tag;
    Ele_Length len;
    Ele_Value  value;
    PEle_St next;
}Ele_St, *PEle_St;
//h消息Q信元流格式?br>typedef struct Req_Ele_Stream
{
    Plugin_ID src_id;//源插件id
    Service_Type req_type;//hcd
    PEle_St ele;
} Req_Ele_Stream, *PReq_Ele_Stream;
//响应消息Q信元流格式?br>typedef struct Rsp_Ele_Stream
{
    Plugin_ID dest_id;//目的插gid
    Service_Type req_type;//响应对应的请求的cd?br>    Execute_Result result;//记录执行l果
    Execute_Reason reason;//记录执行l果的原?br>    PEle_St ele;
} Rsp_Ele_Stream, *PRsp_Ele_Stream;
//接收插g调用服务h函数Q由插g提供Q入参ؓh信元。返回gؓ响应信元,用于同步h处理?br>PRsp_Ele_Stream PF_Receive_Invoke_Proc(PReq_Ele_Stream pele_str);
//插g收到响应消息的处理入口函敎ͼ由插件提供。如此ؓ响应信元?br>void PF_Receive_Rsponse_Porc(PRsp_Ele_Stream pele_str);

插g间的依赖关系是通过信元来实现的。至于信元流的用在我的另一博?a >《用信元流QTLVStreamQ规范、简化模块(C/C++Q间交互 ?/a> 中有描述。插件对外的接口都是l一的?

如果插g要和其他的插仉信Q则调用PF_Init_Plugin函数的传递的服务调用接口Q?invoke_serv_func。插件框架根据信元流的类型,查找驱动表,扑ֈ对应的服务接收函数。插件用函数 PF_Receive_Invoke_Proc接受其他插g的请求,此函数是插gx件框架主动注册到驱动表的?

如果服务时同步的Q这直接通过此函数返回,q回的信息在响应信元中。如果是异步的请求,q插件在处理完成后,通过 send_rsp_func函数来发送响应?

插g的卸?/strong>
//卸蝲插g时调用的函数Q类g析构函数。由插g提供Q供插g框架卸蝲插g时调用?br>void PF_Destroy_Func();



]]>
构徏自己的C/C++插g开发框Ӟ二)——M功能http://www.aygfsteel.com/chgaowei/archive/2009/10/12/297968.html帔R?/dc:creator>帔R?/author>Mon, 12 Oct 2009 12:18:00 GMThttp://www.aygfsteel.com/chgaowei/archive/2009/10/12/297968.htmlhttp://www.aygfsteel.com/chgaowei/comments/297968.htmlhttp://www.aygfsteel.com/chgaowei/archive/2009/10/12/297968.html#Feedback0http://www.aygfsteel.com/chgaowei/comments/commentRss/297968.htmlhttp://www.aygfsteel.com/chgaowei/services/trackbacks/297968.html在这一pd的上一个文章中Q介l了构徏C/C++插g开发框架的初步设想Q下面我会一步步的向下展开Q来实现我的q个设想?

今天主要谈一下我对这个框架的功能认识Q或是期望。昨天看了一关?a >持箋集成能力成熟度模?/a> 的一文章,受此启发Q我Ҏ框架的认识渐渐清晰?

q个框架可以当做我们公司底层产品Q交换机Q资源服务器{)的基设施。上层基于java开发的产品可以直接在OSGI上开发?

核心功能Q?/strong>

1、最重要的一个功能是Q提供一个模块化的编E模型,促进模块化Y件开发,真正的实现针Ҏ口编E?

2、提供一个有助于提高模块可重用性的基础设施?

3、提供一个C/C++插g的运行环境?

4、提供一个动态插件框Ӟ插g可以动态更改,而无需重启pȝ。这个功能虽然不隑֮玎ͼ但是用处好像不是很大?


扩展部分功能Q?/strong>

1、支持分布式pȝl构Q多个运行框架组合v来Ş成一个系l,Ҏ块内部隐藏远E通讯l节?

2、支持系l的分层架构?

3、能够和其他的开发框架进行集成,比如OSGIQSCA{?

4、多个运行框架中Q能够实现对q行框架的有效管理?

5、概念上要实现类gSCA中componentQ构ӞQcompositeQ组合构ӞQDomainQ域Q的概念?


开发部分功能:

1、ؓ了简化开发,开发一个Eclipse插gQ用于开发框架中的C/C++插g。能够根据插件开发向|最l生成符合插件规范的公共代码Q配|文ӞMakefile文g{?


调试部分功能Q?/strong>

1、提供一个统一的日志处理函敎ͼ可以集成Log4cpp?

2、提供模块间的消息日志,以及框架对外的接口日志?

3、提供消息和日志的追t功能,能将和某事g相关的消息和日志单独提取出来?

4、提供资源监功能,监测对资源(内存Q套接字Q文件句柄等Q的使用情况?


试部分功能Q?/strong>

1、集成一些单元测试框Ӟ比如unitcppQ达到自动化单元试的目标?

2、自己实现自动化集成试框架Qƈ且开发相应的Eclipse插gQ简化集成测试(利用脚本和信元流Q?

3、集成原有的自动化功能测试框架flowtestQƈ且开发相应的Eclipse插gQ简化功能测试?

4、实现性能试Q监框架?


部v部分功能Q?/strong>

1、实现自动化部v。特别是在分布式应用的情况下?

2、提供一个命令行E序Q通过命o更改pȝ配置Q管理插件?/p>

]]>
构徏自己的C/C++插g开发框Ӟ一Q?amp;mdash;—初步设想http://www.aygfsteel.com/chgaowei/archive/2009/10/12/297966.html帔R?/dc:creator>帔R?/author>Mon, 12 Oct 2009 12:16:00 GMThttp://www.aygfsteel.com/chgaowei/archive/2009/10/12/297966.htmlhttp://www.aygfsteel.com/chgaowei/comments/297966.htmlhttp://www.aygfsteel.com/chgaowei/archive/2009/10/12/297966.html#Feedback0http://www.aygfsteel.com/chgaowei/comments/commentRss/297966.htmlhttp://www.aygfsteel.com/chgaowei/services/trackbacks/297966.html 最q一直在学习OSGI斚w的知识。买了一本《OSGI原理和最佛_c,可是q没有到。遗憄是,OSGI目前的几个开源框架只支持JavaQ对C和C++都不支持的。可惜我们公司目前主要的开发语aq是c和c++Q即便是引进OSGIQ所得的好处范围有限。而我Ҏ散耦合的模块化开发向往已久。查了一下OSGI对C++支持的好像是有一个开源项目,不过好像应用范围很小。而SCA标准中是有对C++实现模型的支持的Q但是几个开源的框架目前q只支持JAVA?

  昨天看了丁亮的{载的一博客?strong>C/C++Q构Z自己的插件框?》,原文的链接:http://blog.chinaunix.net/u/12783/showart_662937.html 。看了一下里面讲的方法,自己倒是可以实现。所以有了构qc/c++插g开发框架的x。今天先写一下初步的设想?

C/C++插g开发框架的要素

  BlueDavy有一介l服务框架要素的文章Q链接:http://www.aygfsteel.com/BlueDavy/archive/2009/08/28/172259.html Q。我的插件框架也要考虑、解决以下的几个问题Q?

  1、如何注册插Ӟ

  2、如何调用插Ӟ

  3、如何测试插Ӟ

  4、插件的生命周期理Q?

  5、插件的理和维护;

  6、插件的l装Q?

  7、插件的出错处理Q?

  8、服务事件的q播和订阅(q个目前q没有考虑要支持)Q?

  其中有几个点很重要:1Q插件框架要能够使模块松散耦合Q做到真正的面向接口~程Q?Q框架要支持自动化测试:包括单元试Q集成测试;3Q简化部|Ԍ4Q支持分布式Q模块可以调用框架外的插件?

采用的技?/strong>
  插g框架要解决的一个问题就是插件的动态加载能力。这里可以用共享库的动态加载技术。当ӞZ单,W一步只考虑做一个linux下的插g框架?

  Ml构

  框架的Ml构上,参考OSGI的“微内核+pȝ插g+应用插g”结构。这里要好好考虑一下把什么做在内怸。关于微内核l构Q以前我做个一个微内核程引擎Q会在后面有旉和大家分享?

  框架中模块间的数据传送,有两U解x法:一是普元采用的XML数据ȝ的做法。优Ҏ扩展性好Q可L好。但是速度有些慢。二是采用我熟悉的信元流。优点的效率高,讉K方便Q但是可L差一点,另外跨框架的数据传送,需要考虑|络字节序的问题?

  对于框架间的通信Q通过pȝ插g装Q对应用插g隐藏通信l节?

      部v

      努力做到一键式部v?/p>

]]>
վ֩ģ壺 | | Ϊ| | Ƕ| | | | ڳ| | | | | | | | տ| ƽ| ƺ| ɫ| | | | | | | ˮ| | ȳ| | | ƽ| е| | Դ| Ѿ| ν| | | | ɽ|