TYPESDK 服务端设计思路与架构之一:应用场景分析

作为一个渠道SDK统一接入框架,TYPESDK从一开始,所面对的需求场景就是多款游戏,通过一个统一的SDK服务端,能够同时接入几十个甚至几百个各种渠道的SDK。而且这些渠道接口的具体接入字段和接入逻辑,每个月以至每周,都可能发生或大或小的变动。在这样一个复杂的应用场景下,我们应该如何设计一个足够强大而又足够灵活的SDK服务端呢?

首先我们需要厘清,在整个应用场景中,TYPESDK所处的位置,以及它所需要实现的核心功能。

图1

如图1所示,TYPESDK服务端最关心的接口,是游戏服务端与TYPESDK服务端之间的通信接口,以及渠道服务端与TYPESDK服务端之间的通信接口。以登录流程为例,就是游戏服务端向TYPESDK服务端发起的验证用户请求和渠道服务端向TYPESDK服务端返回的验证结果;以支付流程为例,就是渠道服务端向TYPESDK服务端发起的支付完成回调和TYPESDK服务端向游戏服务端发起的发货请求。

下面我们分别就这两个主要流程进行分析:

图2

流程说明

  1. 用户点击登录按钮时,游戏客户端调用TypeSDK登录接口,详细调用方式及参数说明请参考客户端接口文档
  2. TypeSDK客户端调用渠道客户端SDK的API登录
  3. 渠道客户端SDK自我机制请求渠道服务端
  4. 渠道客户端SDK获取服务端返回的验证用参数
  5. TypeSDK客户端获取渠道客户端SDK获得的参数并包装
  6. 游戏客户端获取包装后的参数
  7. 游戏客户端将包装后参数用自身机制传输给游戏服务端
  8. 游戏服务端访问TypeSDK服务端的用户会话验证接口。将流程6中获得的参数传送给TypeSDK服务端。
  9. TypeSDK服务端访问渠道服务端的用户验证接口,进行登录验证
  10. 渠道返回验证结果
  11. TypeSDK服务端对渠道返回的验证结果进行包装,返回给游戏服务端游戏服务端根据渠道验证结果,通知游戏客户端本次登录是否成功。

从以上的流程中可以分析出,在登录流程中,TYPESDK服务端所需要完成的工作就是完成一个包装的动作。将游戏服务端提供的标准化的参数,根据渠道的要求进行分别包装,让数据符合渠道服务端的需求,随后提交给渠道服务端。然后再把各种渠道返回的千奇百怪的验证结果做出区分解析,再通知游戏服务端,以供游戏逻辑使用。

图3

流程说明

  1. 充值订单到帐后,渠道服务端异步通知TYPESDK服务端
  2. TYPE服务端通知游戏服务端发货
  3. 游戏服务端收到发货请求后先保存该请求,立刻返回TYPESDK服务端,表示已收到发货请求。
  4. TYPESDK返回渠道服务端
  5. 游戏服务端异步处理发货逻辑。并通知游戏客户端

再看充值到帐流程,在这个简化版的充值到帐流程中,我们可以看到,TYPESDK服务端所完成的工作也是一个简单的包装动作,将各种不同的渠道回调请求包装成标准的数据格式,通知给游戏服务端,供游戏处理发货。

根据以上分析,我们就理清了TYPESDK服务端在整个流程中的位置和主要工作。在接下来的文章中,我们再具体的分析,怎样的设计,才能让它更好的适应灵活多变的应用场景,应付主要风险。以及如何将各大渠道的服务端SDK,接入我们这个统一的框架中。

这个项目已开源,大家有兴趣可以自己研究或者参照项目编写自己的聚合SDK

项目地址:https://code.csdn.net/typesdk_code

项目地址:https://github.com/typesdk

TYPESDK手游聚合SDK服务端设计思路与架构之一:应用场景分析的更多相关文章

  1. TYPESDK手游聚合SDK服务端设计思路与架构之二:服务端设计

    在前一篇文中,我们对一个聚合SDK服务端所需要实现的功能作了简单的分析.通过两个主要场景的功能流程图,我们可以看到,作为多款游戏要适配多个渠道的统一请求转发中心,TYPESDK服务端主要需要实现的功能 ...

  2. TYPESDK手游聚合SDK服务端设计思路与架构之三:流程优化之订单保存与通知

    经过前两篇文字的分析与设计,我们已经可以搭建出一个能够支持多游戏多渠道的聚合SDK服务端,但这只是理想化状态下的一个简化模型.如果接入渠道的逻辑都是按照理想化的简化过程来构建,那么对于支付的请求,我们 ...

  3. TYPESDK手游聚合SDK服务端设计思路与架构之四:流程优化之信息安全与订单校验

    有了前文几个步骤的分析和设计,TYPESDK的信息交互流程已经可以正常工作了,但是,这个流程还没有考虑到支付这样的过程中,至关重要的信息安全问题. 在整个交互过程中,游戏服务端,SDK服务端,渠道服务 ...

  4. TYPESDK手游聚合SDK客户端远程开关:渠道支付黑名单

    渠道支付要做开关干嘛用呢?为什么要做这种东西呢? 这个教训来分享一下,我们的游戏上线公测了,59个渠道首发,其中包括了应用宝,UC,360等的大渠道,也包含有一些工会渠道和小渠道,上线后一切正常,但是 ...

  5. 手游聚合SDK开发之远程开关---渠道登入白名单

    白名单有啥好说的呢?无非就是筛选登入,大家第一眼看到就是这个印象,白名单也是有文章的,弄的时机不同会给你带来很不错的收益,注意是收益.还是举例来说,游戏上线前渠道都会做一个预下载,一般提前1-2天,这 ...

  6. 服务端高并发分布式架构 ESB 企业服务总线

    服务端高并发分布式架构演进之路 - 个人文章 - SegmentFault 思否 https://segmentfault.com/a/1190000018626163 ESB 企业服务总线讲解 ht ...

  7. rsync服务端排错思路

    rsync服务端排错思路       rsync服务端排错思路 查看rsync服务配置文件路径是否正确,正确的默认路径为/etc/rsyncd.conf 查看配置文件里host allow,host ...

  8. 移动APP服务端设计开发注意要点

    2014年,移动APP的热度丝毫没有减退,怎么为您的移动端app设计良好的服务器端接口(API)呢? 下面谈谈我个人的一些想法. 2014年,移动APP的热度丝毫没有减退,并没有像桌面软件被WEB网站 ...

  9. RO05 - 如何编写RemObjects SDK服务端 (Delphi Version)

    转载:http://blog.csdn.net/henreash/article/details/2261134 本文档向你展示如何使用RemObjects(Delphi版)创建第一个服务.读了本文档 ...

随机推荐

  1. Virtual Box配置CentOS7网络(图文教程)

    之前很多次安装CentOS7虚拟机,每次配置网络在网上找教程,今天总结一下,全图文配置,方便以后查看. Virtual Box可选的网络接入方式包括: NAT 网络地址转换模式(NAT,Network ...

  2. node.js学习(三)简单的node程序&&模块简单使用&&commonJS规范&&深入理解模块原理

    一.一个简单的node程序 1.新建一个txt文件 2.修改后缀 修改之后会弹出这个,点击"是" 3.运行test.js 源文件 使用node.js运行之后的. 如果该路径下没有该 ...

  3. ABP文档 - Javascript Api - Message

    本节内容: 显示信息 确认 Message API给用户显示一个信息,或从用户那里获取一个确认信息. Message API默认使用sweetalert实现,为使sweetalert正常工作,你应该包 ...

  4. Linux下Nodejs安装(完整详细)

    之前安装过windows下以及Mac下的node,感觉还是很方便的,不成想今天安装linux下的坑了老半天,特此记录. 首先去官网下载代码,这里一定要注意安装分两种,一种是Source Code源码, ...

  5. 前端学Markdown

    前面的话   我个人理解,Markdown就是一个富文本编辑器语言,类似于sass对于css的功能,Markdown也可以叫做HTML预处理器,只不过它是一门轻量级的标记语言,可以更简单的实现HTML ...

  6. AJAX实现登录界面

    使用php跳转界面和AJAX都可实现登录界面的跳转的登录失败对的提醒.但是,php跳转的方式 需要额外加载其他界面,用户体验差.AJAX可实现当前页面只刷新需要的数据,不对当前网页进行 重新加载或者是 ...

  7. python 数据类型 -- 元组

    元组其实是一种只读列表, 不能增,改, 只可以查询 对于不可变的信息将使用元组:例如数据连接配置 元组的两个方法: index, count >>> r = (1,1,2,3) &g ...

  8. C#语法糖大汇总

    首先需要声明的是"语法糖"这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕 ...

  9. BPM配置故事之案例11-操作外部数据源

    小明:可以获取ERP数据了-- 老李:哦,这么快?小伙子,我非常看好你,来来,别急着走,再陪我聊会-- 小明:--您老人家不是又要改流程吧? 老李:没有没有,哎嘿嘿嘿,我们这不都是为公司效率着想嘛,这 ...

  10. Java—恶心的java.lang.NumberFormatException解决

    项目中要把十六进制字符串转化为十进制, 用到了到了Integer.parseInt(str1.trim(), 16):这个是不是后抛出java.lang.NumberFormatException异常 ...