前言

在游戏生态中,主要包含游戏的研发方以及运营发行方。一款游戏的运行,分为研发和运营两个阶段。研发的主体有个人、独立工作室、游戏研发公司等;

游戏的研发主体专注于游戏内容的研发,对游戏的发行及运营往往在人力、财力上投入不足,促使游戏发行及运营业务应运而生,产生了独立的运营发行方。目前市场上很多大型游戏厂商将自己的发行及运营能力打包给运营发行方。另外还有一些游戏的分发渠道方,依托于自己的流量优势,也提供仅针对本渠道的联合运营服务。

上图中有关的交互的部分:

l 游戏本身的操控交互是在游戏客户端与游戏服务端间进行的,大部分会采用Socket长链接的方式进行通信。
l 游戏客户端与游戏发行方平台的交互,包括登录,支付等等,这些由游戏玩家主动请求的会采用http的方式进行链接通信。

这两部分的交互选型相对固定。
但在运营发行方中关于运营消息以及广告推送等场景,例如各类服务器运维升级等跑马灯信息;账号踢下线信息;悬浮窗广告;普通消息推送等等服务更多是由游戏的运营发行方主动推送的。在百万级游戏客户的情况下,如何选择更适合的交互方式是一件头痛的事情。

我们在本章中探讨如何更好地选择运营发行消息的技术实现。

运营发行方推送的特点与要求

1.触达用户多:一款成功的游戏总客户数经常超百万千万。同时在线数高。
2.消息的时效性不同:有些消息是在某时间段内都生效的(例如主游戏服运维升级通知),无论客户当前的状态是否在线,如果当前客户在线那么就立刻收到,离线的客户在下次进入游戏时也会收到相应的消息。有些消息是对于当前在线的客户(例如账号踢下线信息)才有意义。
3.精准的群发性诉求:推送的消息都是对于具有某类特征的客户群体进行广播(例如不同的广告对应不同等级的游戏玩家)
4.连接的轻量级消耗:这类数据的交互对比游戏本身操控来说,频率较低,所以游戏客户端与广告运营等数据推送的流量占用的客户端运行资源尽可能的少。
5. SDK依赖资源简洁:在游戏领域里,由研发团队会产生游戏母包,而运营发行方会在母包的基础上嵌入运营所需要的SDK包,例如支付功能, 数据推送功能;那么对于推送功能本身所依赖的资源包就越小越好了。

备选的技术方案分析

1. http轮询方案: 
优点:
游戏客户端依赖最少,实现方便。
缺点:
无效轮询占比高:多个客户端,多种类的轮询多,鉴于本类消息的频率不高,那么绝大部分轮询都是没有实际业务意义的。
运营端实现复杂:需要使用额外的代码逻辑专门维护已读取状态。
资源占用高:周边配套的调用链,日志信息,并发处理能力这些推高了资源占用情况。

2. Socket方案: 
优点:
游戏客户端依赖比较少,实现方便。
缺点:
连接维护:运营方会有不同种类型的应用划分(例如广告可能是单独的应用,系统管理也会是另一单独的应用),如果都需要推送,那么就必须有不同的socket连接到不同类型的应用;这样游戏客户端的连接就会增多,从而占用比较多的资源。
运营端实现复杂:需要使用额外的代码逻辑专门维护订阅推送类型,在推送过程中需要代码实现过滤,精准投递到目标群体; 为了保证推送的质量(到达与否),需要额外记录推送状态;对于推送数据的时效需要额外的控制,有些过期的消息(例如服务运维时间通知)。

3. KAFKA方案: 
优点:
接入简单:成熟的消息中间件,支持各种实现语言。只需要对接Kafka 节点本身,不需要直接与发行方的应用进行连接,天然解藕。
功能强大: 推送数据的状态维护,存储等都可以借用Kafka的来提供。
缺点:
客户端连接数支持不足,无法通过简单的集群来支持数量众多的游戏玩家(客户端)。

4. MQTT方案: 
优点:
接入简单,MQTT的协议非常简洁,支持各种实现语言。
支持各种订阅关系。
支持p2p消息。
支持各种消息触达的QoS质量。
可观测客户端的连接情况。
支持百万级的连接。
缺点:
MQTT技术当前阶段不如其它方案大众。

MQTT技术方案

通过对比,上面的三种方案, MQTT方案是非常符合作为游戏的运营发行方与游戏客户端进行推送数据的交互场景。那么我们来看看这个技术的设计原则。

1、轻量级与高效的微消息,MQTT协议精简,消息头特别简单; 
2、基于发布/订阅(Pub/Sub)通讯模式,可以进行双向通信;
3、支持topic进行消息存储落盘;
4、支持订阅关系设定;支持p2p的模式与广播模式;
5、支持百万级别的连接设备;
6、提供消息服务质量管理;
7、适用于低带宽、高延迟、不稳定的网络;

这里,我们比较一下阿里云的产品微消息队列MQTT与开源MQTT。

结语

在游戏发布运营平台中,使用阿里云微消息队列MQTT产品可以满足运营平台与游戏客户端间的数据推送服务场景,即既保证了百万级连接,又实现了资源占用少,也能做到各种复杂的消息数据发布订阅管控。

原文链接
本文为阿里云原创内容,未经允许不得转载。

MQTT在游戏运营发行中的实践相关推荐

  1. Bilibili资深运维工程师:DCDN在游戏应用加速中的实践

    简介:bilibili资深运维工程师李宁分享<DCDN在游戏应用加速中的实践>从bilibili游戏应用的效果和成本入手,深入浅出地分享DCDN全站加速在游戏加速场景中的应用. 日前,云栖 ...

  2. 游戏运营数据中DAU的解析

    转载于http://www.gamedatas.com/archives/151 作为一个网游的从业人员,随时随地打开电脑的第一反应便是关注自己游戏项目的日活跃用户,新用户,收入情况.本文结合了一些博 ...

  3. 案例:React Native在字节跳动游戏营销场景中的实践

    ????????关注后回复 "进群" ,拉你进程序员交流群???????? 作者丨熊文源 来源丨前端之巅(ID:frontshow) https://mp.weixin.qq.co ...

  4. 月薪3W的游戏运营都做哪些工作?

    随着手游市场的份额不断扩大,游戏行业的从业人员人数也逐年增多.大多数人的询问运营的工作是干什么的时候,都无法给出一个标准.统一的答案.运营的工作,会根据每家公司实际情况而定,大部分情况下囊括推广.策划 ...

  5. 如何做好游戏运营?游戏运营的五大步骤重要方法

    导读:做好游戏经营的五点:积累经验才能进步,做得多≠收入高贡献大,好的运营更重要的是遇上一个好产品,慎重做决策,运营什么都要会一点. 积累经验才能进步 运营跟程序等其他领域的人员不一样的是,其... ...

  6. 【入门】游戏运营不完全手册

    写在前面的话: 游戏运营是一个琐碎苦逼但非常关键的岗位,你能体验到身为游戏奶牛和玩家保姆的双重体验,用"磨人"二字来形容游戏运营再合适不过.本文主要介绍游戏运营的一些基本知识,为刚 ...

  7. 一文带你全面了解游戏运营这个岗位

    在国内,游戏行业的从业者众多,而每家游戏公司几乎都会囊括市场.运营.技术.设计等职位,今天我们就来详细聊一下游戏运营,给想入行的朋友们一些建议,以及给初入行的朋友们一些遗漏知识面上的扩充. 百科词条对 ...

  8. 游戏社交不足怎么办? 游戏发行中的社交化运营经验分享

    http://www.gameres.com/687428.html 3 天前 上传 下载附件 (26.17 KB) 文/孙秀龙 今天很开心在这里和大家分享一下游戏发行中的社交化运营,这次分享目的是带 ...

  9. Serverless在游戏运营行业进行数据采集分析的最佳实践 链接:

    简介:这个架构不光适用于游戏运营行业,其实任何大数据采集传输的场景都是适用的,目前也已经有很多客户正在基于Serverless的架构跑在生产环境,或者正走在改造Serverless 架构的路上. 作者 ...

最新文章

  1. 智汇医工 创享未来:国家标准《健康医疗信息安全指南》验证项目启动会成功举办...
  2. Java内部类的使用小结
  3. 由数据库对sql的执行说JDBC的Statement和PreparedStatement
  4. eclipse中jsp页面 page报错问题
  5. pytorch中模型结构图的可视化
  6. Android apk的安装
  7. 论文阅读 (70):Exploring Self-attention for Image Recognition
  8. win10 登录显示0x800704cf错误代码
  9. Mysql添加报错 MySqlException: Incorrect string value: ‘\xE5\xAF\xBC\xE5\x85\xA5...‘ for
  10. 介绍java中Pair和Map的区别
  11. 微服务中的Spring Cloud和Spring Cloud Alibaba分别有哪些组件和作用,众多组件中如何做技术选型?
  12. Cecil学C#界面编程——配置环境和入门
  13. 火影七代目的青鸟誓言
  14. python两个表格相同数据筛选_python筛选出两个文件中重复行的方法
  15. 爱笑程序员-笑话10则
  16. 数据结构上机——希尔排序(含监视哨版本)
  17. mysql5.5 mysql5.6 mysql5.7官方手册
  18. 隆重推荐:怪诞行为学
  19. 苹果安装移动卡显示无服务器,sim卡没坏但苹果手机无服务
  20. dfs序+线段树 BZOJ3252 攻略

热门文章

  1. vba 自定义function返回值_用vba解决excel如何求前面连续为0的个数
  2. nlp 财务提取_RPA,智慧财务时代的“珍妮纺织机”来了?
  3. android多个水波球,android球形水波百分比控件代码
  4. java enum枚举使用例子
  5. Java学习之数据库中的范式和反范式
  6. linux nginx 状态,Nginx开启运行状态(status)功能 | IT运维网
  7. python中的with open读取表格文件_python 使用 with open() as 读写文件
  8. createprocess失败代码2_pytest文档57单元测试代码覆盖率(pytestcov)
  9. python pandas库 画图_python绘图:matplotlib和pandas的应用
  10. 【学习记录】网络层——IP数据报(格式与分片)