Your SlideShare is downloading. ×
腾讯大讲堂46 自由cgi之路v3
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

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

1,928
views

Published on


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
1,928
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
29
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

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