Upload
areyouok
View
1.990
Download
12
Embed Size (px)
Citation preview
自由 CGI 之路
腾 讯 大 讲 堂
第四十六期
研发管理部
大讲堂主页: http://km.oa.com/class与讲师互动: http://km.oa.com/group/class
公司内部交流,请勿外传
自由 CGI 之路 V3
----- 面向对象的可配置的 CGI 编程
互联网运营部 tommyyan2008-09-03
自由 CGI 之路
新的 CGI 系统介绍
• 在 cgi 的开发实践中,通过不断的系统重构,完成了一个基于配置的 cgi 系统。一般情况下,系统中添加一个传统意义上的 cgi 请求,只需要进行几个配置文件的少量修改即可完成,而不需要进行编码工作。通过驱动模块的扩充可以使系统不断增加新的功能。
• 良好的扩充性:可以基于点的控制也可以基于流程的控制,• 中间件的技术:使接口在上层表现出了一致的特点
重复性的工作的处理:在这个系统中基本上看不到
• 系统的规模的控制:使变更的影响范围在合理的范围内进行;• 全配置的系统:即使在配置上也很注重细节,做到了基于模板的
配置和默认值选取,使一次新的配置也许只是个别字段的修改。
自由 CGI 之路
神奇的 tcgi
• #include "cgi.h"• #define CGI_CONF_PATH "/usr/local/MKT_Act/conf/"
• int main(int argc,char*argv[]){• TCgi theCgi;• 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.xml
templateType=1
templateCode=utf-8
checklogin=true
oplist=bidlottery
args=actid|type
starttime=2008-02-01 08:30:00
endtime=2008-03-01 23:59:59
自由 CGI 之路
参数处理 - 输入
• 参数输入类型
• 整形 / 字符类型 / 特殊类型(文件等)
• 取值范围
• 默认值
• 错误返回对应的描述,返回码
• 是否允许为空
自由 CGI 之路
参数处理 - 输出
• 输出的格式多样( web 支持的各类格式)
• xml 、 html 、图片文件等等
• 返回类型多样
• 错误返回、正确返回,基于模版的返回
• 是否记录执行结果的多样性
• 日志、告警、统计等
•
自由 CGI 之路
参数中心类 - CgiArgCenter
• 字符编码( xml 、 html 、 js 、 url 。。。)
• 参数检查(整形大小,字符型长度)
• 输入输出参数的缓冲区
• 根据指定的模板类型进行字符编码
•
自由 CGI 之路
模板管理
• 根据不同的错误代码、某一个字段的返回值取不同的模板
• 各种格式模板的支持和自动转译
• 基于操作名的模板替换
代码描述: 模板示例
<%$RETURN_ERROR_begin$%><%RETURN=default_begin%> try{
var rc1="<%RETURN_CODE%>" ;rc2="<%RETURN_SUBCODE%>"; MPPresentlist=""; callback(rc1, rc2, MPPresentlist);
}catch(e){status="callback is not exist!"}
<%RETURN=default_end%><%$RETURN_ERROR_end$%><%$campusdui_begin$%>
try{ var rc1="0";
rc2="<%MPResultCode%>"; MPPresentlist="<%MPPresentList%>"; callback(rc1, rc2, MPPresentlist);
}catch(e)
{status="callback is not exist!"}<%$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 之路
驱动 - 统一接口
• 对一个外部接口的统一封装,一致性的接口,系统启动时注册到操作管理器中
• 初始化接口• typedef void *(*FUNC_DRIVER_INIT)(map<string,string>&);
• 操作接口
• typedef int (*FUNC_DRIVER_OP)(void *, const char* ,map<string,string>&,void*);
• 取一条数据接口
• typedef int (*FUNC_DRIVER_FETCH_ROW)(void *, const char* ,map<string,string>&);
• 释放数据接口• typedef int (*FUNC_DRIVER_FREE_RESULT)(void *, const char* );
• 结束接口• typedef int (*FUNC_DRIVER_END)(void *context);
自由 CGI 之路
驱动 -已经实现的接口
• TTC• 支付 Portal• 字符串协议
• MGW
自由 CGI 之路
高级应用 - 系统扩展性
• 扩充新的驱动
• 建立业务级别的操作
• 建立操作之间的衔接和处理
• 数据源 - 基于模板的配置
• 流程的特殊处理
自由 CGI 之路
公用模块 - 系统级别
• GET/POST 方式检查
• 参数相关
• 模板相关
• 生效时间、结束时间
自由 CGI 之路
公用模块 - 公司级别
• 社区登录态检查
• 脏话过滤
• 验证码检查
• 增值中心位判断
• 功能性 tips 发放
自由 CGI 之路
公用模块 - 业务级别
• 物品管理: 赠送、购买、限制
• 包月业务购买
• 动态用户群判断
• 加锁、频率限制模块
• 兑换规则
• 业务统计数据上报
• 模块间调用监控告警
公司内部交流,请勿外传
谢 谢!