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

1,201 views

Published on

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

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
1,201
On SlideShare
0
From Embeds
0
Number of Embeds
10
Actions
Shares
0
Downloads
30
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

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

×