自由CGI之路腾讯大讲堂第四十六期研发管理部大讲堂主页:与讲师互动:公司内部交流,请勿外传自由CGI之路V3-----面向对象的可配置的CGI编程互联网运营部tommyyan2008-09-03自由CGI之路新的CGI系统介绍•在cgi的开发实践中,通过不断的系统重构,完成了一个基于配置的cgi系统。一般情况下,系统中添加一个传统意义上的cgi请求,只需要进行几个配置文件的少量修改即可完成,而不需要进行编码工作。通过驱动模块的扩充可以使系统不断增加新的功能。•良好的扩充性:可以基于点的控制也可以基于流程的控制,•中间件的技术:使接口在上层表现出了一致的特点重复性的工作的处理:在这个系统中基本上看不到•系统的规模的控制:使变更的影响范围在合理的范围内进行;•全配置的系统:即使在配置上也很注重细节,做到了基于模板的配置和默认值选取,使一次新的配置也许只是个别字段的修改。自由CGI之路神奇的tcgi•#includecgi.h•#defineCGI_CONF_PATH/usr/local/MKT_Act/conf/•intmain(intargc,char*argv[]){•TCgitheCgi;•theCgi.RunEx(CGI_CONF_PATH);•}自由CGI之路发展历程自由CGI之路cgi层次结构自由CGI之路CGI处理流程自由CGI之路CGI处理流程自由CGI之路CGI基础层自由CGI之路CGI基础层•完成所有与外部应用系统无关的封装•完成一个CGI完整的逻辑封装•提供基于中间件的驱动接口•提供可以重载的流程接口•提供二次开发接口•提供配置项管理的接口自由CGI之路系统基础层•完成所有公司、系统级别的可重用性的封装•提供类似cgiex类似的web方式cgi访问•对基础库的功能封装•TLib、TBase及其他公司、部门相关库•提供公用数据源接口的驱动封装•TTC、mysql、c4a、支付portal等•相关的业务统计、运维统计、告警操作自由CGI之路业务基础层•完成所有业务级别的可重用性的封装•业务级别的检查•例如:用户注册的检查、黑名单检查、•业务公用信息的获取•用户的性别、城市、时间戳、个人账户,•可配置的数据读取和操作•高级用户状态、好友资料•自由CGI之路业务层•特殊业务逻辑的处理•统计点、监控点的添加自由CGI之路CGI基础层•完成所有与外部应用系统无关的封装•参数处理•模板管理•操作管理•驱动管理•项目、模块管理•配置系统自由CGI之路基础层-配置系统自由CGI之路项目管理、接口描述-cgi.ini•按照一定规模组织的外部接口(cgi)的集合,接口包含一下描述•输入特性•输出特性•操作列表•全局的检查点•公共功能自由CGI之路•#发起抽奖[lotterybid]templateFile=/template/lotterybid.xmltemplateType=1templateCode=utf-8checklogin=trueoplist=bidlotteryargs=actid|typestarttime=2008-02-0108:30:00endtime=2008-03-0123:59:59自由CGI之路参数处理-输入•参数输入类型•整形/字符类型/特殊类型(文件等)•取值范围•默认值•错误返回对应的描述,返回码•是否允许为空自由CGI之路参数处理-输出•输出的格式多样(web支持的各类格式)•xml、html、图片文件等等•返回类型多样•错误返回、正确返回,基于模版的返回•是否记录执行结果的多样性•日志、告警、统计等•自由CGI之路参数中心类-CgiArgCenter•字符编码(xml、html、js、url。。。)•参数检查(整形大小,字符型长度)•输入输出参数的缓冲区•根据指定的模板类型进行字符编码•自由CGI之路模板管理•根据不同的错误代码、某一个字段的返回值取不同的模板•各种格式模板的支持和自动转译•基于操作名的模板替换代码描述:模板示例%$RETURN_ERROR_begin$%%RETURN=default_begin%try{varrc1=%RETURN_CODE%;rc2=%RETURN_SUBCODE%;MPPresentlist=;callback(rc1,rc2,MPPresentlist);}catch(e){status=callbackisnotexist!}%RETURN=default_end%%$RETURN_ERROR_end$%%$campusdui_begin$%try{varrc1=0;rc2=%MPResultCode%;MPPresentlist=%MPPresentList%;callback(rc1,rc2,MPPresentlist);}catch(e){status=callbackisnotexist!}%$campusdui_end$%自由CGI之路操作•原子级的对一个驱动接口访问的描述•底层驱动接口•操作类型:查询、修改、删除、新增、赠送、抽奖。。。•参数变换•输入参数和返回结果参数指定•服务器相关信息代码描述:抽奖操作[bidlottery]driver=Portaltype=modfielddisplay=LotteryRankarglist=actid|URL|LOGIN_UIN|typeargmaplist=actid,MPRuleID|type,LotteryTypesubargs=MPRuleID|LotteryTyperesultarglist=LotteryItem,1|LotteryRank,1|ListID,1serverinfo=172.16.60.16:30008|172.16.244.170:30008testserverinfo=172.16.68.141:30007|172.16.68.141:30007自由CGI之路驱动•对一个外部接口的统一接口的封装•加载方式:动态、静态•服务器信息•支持的操作类型自由CGI之路驱动-统一接口•对一个外部接口的统一封装,一致性的接口,系统启动时注册到操作管理器中•初始化接口•typedefvoid*(*FUNC_DRIVER_INIT)(mapstring,string&);•操作接口•typedefint(*FUNC_DRIVER_OP)(void*,constchar*,mapstring,string&,void*);•取一条数据接口•typedefint(*FUNC_DRIVER_FETCH_ROW)(void*,constchar*,mapstring,string&);•释放数据接口•typedefint(*FUNC_DRIVER_FREE_RESULT)(void*,constchar*);•结束接口•typedefint(*FUNC_DRIVER_END)(void*context);自由CGI之路驱动-已经实现的接口•TTC•支付Portal•字符串协议•MGW自由CGI之路高级应用-系统扩展性•扩充新的驱动•建立业务级别的操作•建立操作之间的衔接和处理•数据源-基于模板的配置•流程的特殊处理自由CGI之路公用模块-系统级别•GET/POST方式检查•参数相关•模板相关•生效时间、结束时间自由CGI之路公用模块-公司级别•社区登录态检查•脏话过滤•验证码检查•增值中心位判断•功能性tips发放自由CGI之路公用模块-业务级别•物品管理:赠送、购买、限制•包月业务购买•动态用户群判断•加锁、频率限制模块•兑换规则•业务统计数据上报•模块间调用监控告警公司内部交流,请勿外传谢谢!