32
自由 CGI 之路 腾讯大讲堂 第四十六期 研发管理部 大讲堂主页: http://km.oa.com/class 与讲师互动: http://km.oa.com/group/class

腾讯大讲堂46 自由cgi之路v3

  • Upload
    areyouok

  • View
    1.990

  • Download
    12

Embed Size (px)

Citation preview

Page 1: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

腾 讯 大 讲 堂

第四十六期

研发管理部

大讲堂主页: http://km.oa.com/class与讲师互动: http://km.oa.com/group/class

Page 2: 腾讯大讲堂46 自由cgi之路v3

公司内部交流,请勿外传

自由 CGI 之路 V3

----- 面向对象的可配置的 CGI 编程

互联网运营部 tommyyan2008-09-03

Page 3: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

新的 CGI 系统介绍

• 在 cgi 的开发实践中,通过不断的系统重构,完成了一个基于配置的 cgi 系统。一般情况下,系统中添加一个传统意义上的 cgi 请求,只需要进行几个配置文件的少量修改即可完成,而不需要进行编码工作。通过驱动模块的扩充可以使系统不断增加新的功能。

• 良好的扩充性:可以基于点的控制也可以基于流程的控制,• 中间件的技术:使接口在上层表现出了一致的特点

重复性的工作的处理:在这个系统中基本上看不到

• 系统的规模的控制:使变更的影响范围在合理的范围内进行;• 全配置的系统:即使在配置上也很注重细节,做到了基于模板的

配置和默认值选取,使一次新的配置也许只是个别字段的修改。

Page 4: 腾讯大讲堂46 自由cgi之路v3

自由 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);• }

Page 5: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

发展历程

Page 6: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

cgi 层次结构

Page 7: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

CGI 处理流程

Page 8: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

CGI 处理流程

Page 9: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

CGI 基础层

Page 10: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

CGI 基础层

• 完成所有与外部应用系统无关的封装

• 完成一个 CGI 完整的逻辑封装

• 提供基于中间件的驱动接口

• 提供可以重载的流程接口

• 提供二次开发接口

• 提供配置项管理的接口

Page 11: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

系统基础层

• 完成所有公司、系统级别的可重用性的封装

• 提供类似 cgiex 类似的 web 方式 cgi 访问

• 对基础库的功能封装• TLib 、 TBase 及其他公司、部门相关库

• 提供公用数据源接口的驱动封装

• TTC 、 mysql 、 c4a 、支付 portal 等• 相关的业务统计、运维统计、告警操作

Page 12: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

业务基础层

• 完成所有业务级别的可重用性的封装

• 业务级别的检查

• 例如:用户注册的检查、黑名单检查、

• 业务公用信息的获取

• 用户的性别、城市、时间戳、个人账户,

• 可配置的数据读取和操作

• 高级用户状态、好友资料

Page 13: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

业务层

• 特殊业务逻辑的处理

• 统计点、监控点的添加

Page 14: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

CGI 基础层

• 完成所有与外部应用系统无关的封装

• 参数处理

• 模板管理

• 操作管理

• 驱动管理

• 项目、模块管理

• 配置系统

Page 15: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

基础层 - 配置系统

Page 16: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

项目管理、接口描述 -cgi.ini

• 按照一定规模组织的外部接口( cgi )的集合,接口包含一下描述

• 输入特性

• 输出特性

• 操作列表

• 全局的检查点

• 公共功能

Page 17: 腾讯大讲堂46 自由cgi之路v3

自由 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

Page 18: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

参数处理 - 输入

• 参数输入类型

• 整形 / 字符类型 / 特殊类型(文件等)

• 取值范围

• 默认值

• 错误返回对应的描述,返回码

• 是否允许为空

Page 19: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

参数处理 - 输出

• 输出的格式多样( web 支持的各类格式)

• xml 、 html 、图片文件等等

• 返回类型多样

• 错误返回、正确返回,基于模版的返回

• 是否记录执行结果的多样性

• 日志、告警、统计等

Page 20: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

参数中心类 - CgiArgCenter

• 字符编码( xml 、 html 、 js 、 url 。。。)

• 参数检查(整形大小,字符型长度)

• 输入输出参数的缓冲区

• 根据指定的模板类型进行字符编码

Page 21: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

模板管理

• 根据不同的错误代码、某一个字段的返回值取不同的模板

• 各种格式模板的支持和自动转译

• 基于操作名的模板替换

Page 22: 腾讯大讲堂46 自由cgi之路v3

代码描述: 模板示例

<%$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$%>

Page 23: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

操作

• 原子级的对一个驱动接口访问的描述

• 底层驱动接口

• 操作类型:查询、修改、删除、新增、赠送、抽奖。。。

• 参数变换

• 输入参数和返回结果参数指定

• 服务器相关信息

Page 24: 腾讯大讲堂46 自由cgi之路v3

代码描述: 抽奖操作

[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

Page 25: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

驱动

• 对一个外部接口的统一接口的封装

• 加载方式:动态、静态

• 服务器信息

• 支持的操作类型

Page 26: 腾讯大讲堂46 自由cgi之路v3

自由 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);

Page 27: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

驱动 -已经实现的接口

• TTC• 支付 Portal• 字符串协议

• MGW

Page 28: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

高级应用 - 系统扩展性

• 扩充新的驱动

• 建立业务级别的操作

• 建立操作之间的衔接和处理

• 数据源 - 基于模板的配置

• 流程的特殊处理

Page 29: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

公用模块 - 系统级别

• GET/POST 方式检查

• 参数相关

• 模板相关

• 生效时间、结束时间

Page 30: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

公用模块 - 公司级别

• 社区登录态检查

• 脏话过滤

• 验证码检查

• 增值中心位判断

• 功能性 tips 发放

Page 31: 腾讯大讲堂46 自由cgi之路v3

自由 CGI 之路

公用模块 - 业务级别

• 物品管理: 赠送、购买、限制

• 包月业务购买

• 动态用户群判断

• 加锁、频率限制模块

• 兑换规则

• 业务统计数据上报

• 模块间调用监控告警

Page 32: 腾讯大讲堂46 自由cgi之路v3

公司内部交流,请勿外传

谢 谢!