QCon北京「鸿蒙专场」火热来袭!即刻报名,与创新同行~ 了解详情
写点什么

开发小游戏,云开发真的是银弹吗?(二)

  • 2019-10-31
  • 本文字数:4487 字

    阅读完需:约 15 分钟

开发小游戏,云开发真的是银弹吗?(二)

8 月 17 日,“小程序·云开发”系列沙龙(小游戏专场)圆满落幕。本期沙龙云+社区携手微信 & 云开发官方团队为大家揭秘爆款微信小游戏背后的技术,全面讲解小程序·云开发、实时数据库库及小游戏联机对战引擎,助力小游戏开发。


我们在上一篇和大家探讨了小游戏的开发现状,接下来介绍无服务和云开发。

什么叫做无服务?

Serverless 不知道大家有没有听过?是这两年很火的概念。Serverless 分为两部分:BaaS,后端即服务;FaaS,函数即服务。


在开发过程中,开发者不感知服务器的存在,传统开发要自己买服务器,在服务器上搭建 DB,再买服务器,作为专门的存储服务器,实例搭建完需要编写服务作为中转,操作实例。在无服务的概念下,这些工作完全隐藏掉了,通过提供 API 的方式来直接操作资源,COS、消息队列、存储等后端实例,都作为一个服务,直接通过 API 来调用。Faas 是 Serverless 的核心,也就是无服务器云函数,这个使 serverless 能做的事情更多,在云函数中可以跑真正的业务逻辑,覆盖了各种各样客制化的开发场景。



无服务是未来开发的发展趋势,从物理机到云上的 Iaas 层、主机、PaaS 的开放架构,一步一步释放了人力,让开发者更专注于自己业务能力的开发。


云开发是什么?

1. 云开发的特点

云开发是一个支持小程序、Web、安卓等多端的应用服务中台。其整合了微信公众平台和腾讯云的核心技术,提供云数据库、云存储、云函数、日志和监控等开发运维能力。通过“小程序·云开发”,开发者可无缝安全调用小程序的开放服务,提升开发效率,快速试错和落地产品。



云开发的重要优势之一就是简化后台配置,开箱即用,存储、数据库和云函数,环境创建时都已搭建完成,提供域名和备案,免除繁琐的流程,开发者只需编写核心逻辑代码,无需关注后端配置与运维,专注于业务开发。


云开发集成在小程序的 IDE 里,免认证登录,在 IDE 里面有云开发,云相关 API 不需任何安装。我们和微信通过私有协议实现了更高效的鉴权方式,在微信客户端 SDK 中可以直接调用云上的资源,在云函数中,还可以通过云调用来调用微信的开放接口。这点是云开发的独有能力。


在运维方面云开发稳定可靠,云开发后面是各种腾讯云的基础设施,稳定、安全且高效,具备快速拓展能力,满足不同业务场景和需求。


2. 云开发模式与传统模式的区别

在传统开发模式下,在小程序端使用了其他的服务,需要自己编写 SDK,或者引入额外的 SDK 来调用到你的后端服务,后端服务需要自己来搭建、写框架、写路由、写接口,操作更底层的 DB 资源、COS 资源,在环境上需要打通网络,以及加速等额外的工作。对于开发者来讲,你需要关注的内容很多的。若使用云开发,可以直接使用小程序原生接口,wx.Cloud。这个命名空间下有一系列的接口,通过这里面的接口就可以操作云开发上的这些资源。


在传统的模式下,你想实现简单的图片上传,小程序端、客户端都是一样的,chooselmage+wx.uploadFile,但是整个后端服务搭建需要选择一个合适的框架,设计路由,你接收到这个文件上传到 cos,运维要负责性能安全。若使用云开发的模式,在小程序端就只需要这个代码,wx.Cloud.uploadFile,把 File ID 传进去,整个过程都完成了。你要上传这个文件,自动上传到 cos 上,在链路上,我们会保证链路的一致性、鉴权及相关的操作。以前需要 1000 多分钟,最少三个人做的事情,现在前端 4 分钟就搞定这件事。



插入数据,也是很高频、很常见的操作。在小程序端,你需要 wx.request 来请求后端接口,开路由,写逻辑代理,接收到数据之后,存到 MongoDB,整个流程包括中间沟通的时间,1000 多分钟都过去了。你用云开发模式,前端工程师一个人,直接调 wx.Cloud.database,通过这个 add 可以直接插入一条数据,直接操作远端数据库的服务,很方便。这段代码既可以跑在小程序端,也可以跑在云函数,从前到后都由一个前端开发来编写,统一的技术栈,后面也只需要一种技术栈的人来维护。


3. 云开发有哪些功能?

云函数是 serverless 的核心,也是云开发功能中很重要的一点。云函数,你不需要服务器,也不需要配置域名,调用方式通过 wx.cloud.function 来调用的,开发者工具有一键上传的入口,你可以将自己的代码一键上传到云函数的运行容器中。整个运行环境,由腾讯云保证安全和隔离性。


云函数有一个很便捷的特性,你不需要自己写逻辑来获取到小程序的 appid、openid,我们通过私有协议将其置于云函数的上下文中,云函数中直接获取,不需要鉴权解密等额外行为。我们在前层,有一层自己封装的鉴权服务,所有到达云函数的完全是安全的,携带微信的正常登陆态。



运管方面,云函数可以实现秒级的弹性伸缩,当请求量、并发量大时,可以快速进行扩容,防止服务崩溃。此外云函数与云主机不同,其按运行时间,只有请求处理时才产生一定的费用。

4. 云函数具体的运行原理

在传统的服务器模式下,你的代码部署在远端服务器上,若想要做的更好些,可能需要考虑服务的拆分、服务的分层,多个模块通信,包括之间传递的私有协议链路上的鉴权。你自己从零开始搭建负担蛮重的。现在用云函数的方式,通过方便的部署手段,将云函数部署到远端容器中,在运行的时候,每个容器之间是隔离的,容器自身无状态。这样事件触发的机制,比较适合定时器和单功能接口的请求,请求到来即时处理,即时回收资源,没有冗余。函数容器,接收请求完成生命周期创建,请求返回时,生命周期结束,容器销毁。



云调用是云函数中很好用的一个功能,如果大家有经常进行小程序开发的话,需要使用服务端 API,这些 API 的鉴权,通过 access_token 来做权限标志,云调用屏蔽了这件事情,你在云函数中直接使用 cloud open API 调用微信开放能力。这是发送消息的示例,直接调用这个 API,并不需要传入 access_token,整个调用链就可以直接下来。



Access_token,虽然保证了安全,但在使用过程中有很多问题。开发者要维护过期时间与申请节奏,若多个服务在多个地方同时用到 access_token 的话,一般需要一个中转服务器来专门维护 access_token 的过期与申请。若使用云调用,则完全不用 care 这件事情,开发者是很方便的。在小游戏中,包括内容安全级、动态消息,这 7 个很实用的云调用的接口,在刚刚的示例中,直接用 Cloud open API 点什么来调用这个能力,并不需要 access_token。



云调用的开放能力,比较常见的微信运动、用户信息、分享信息,若使用微信官方 HTTP API 开发方式,则需要签名进行鉴权,签名所需要的一个重要的参数是 sessionkey。其维护起来像 access_token 一样,需要专门分散大块的精力来维护,且一旦没有维护好,将影响所有使用其的服务。



在云函数中使用云调用的能力就像这样,这是获取微信运动的信息,直接通过微信的内置接口获取,但信息经过了加密,只能得到一个 CloudID,需要自己解密才可以解出它具体的信息。而在调用云函数的时候,可以直接用 wx.Cloud.CloudID,传出 cloudID。


云函数端接收到的参数就像这样,刚刚传入的 cloudID 被自动解析成这样一个包,中间并不需要自己来解 cloudID,整个调用对云函数是透明的。



云调用还可以用在实时语音中。实时语音有很多 API,但关键的几个 API 都需要签名,通过 API 的房间 ID,然后随机串、时间戳,以及 sessionkey,通过固定算法计算出来的签名。使用云调用,可以直接调 Cloud 上的 getVoIPSign 的接口,只传入业务相关的 groupId,传入时间戳,以及一个随机串,接口就可以直接把签名吐出来。



使用云调用免除了 sessionkey 和 appid 维护,及签名算法,统一由官方内置的 SDK 来维护。业务方无感知签名方法的具体内容,当签名算法变更或扩展时,内置 SDK 自动支持,减少开发者负担。


云数据库,大家应该经常用到,云开发提供的是一个文档型的数据库,它的格式类似于 JSON。前端开发的会更熟悉,每个 JSON 的对象,实际上数据库中的一条记录,我们提供各个简单的 API 来实现增删查改,在客户端很方便的构造查询,或者构造插入,直接通过 API 来做,并不需要为 DB 搭一个专门的后端 server 层的中转服务。



在小程序端,我们提供了 4 种力度的权限控制,可以实现 collection 级别的权限控制,基本上能完全覆盖公/私有读写搭配,通过权限控制可以做到细类目客户身份的划分,在云函数端具有最高的管理员权限。未来还将提供更细致的 doc 级别的权限划分,创建安全规则满足更细粒度 C 端访问云资源权限管控的需求。


文件存储,小程序提供了云端的存储空间,在云函数、小程序端,通过 API 就可以上传对象到存储中。同样有基于微信登录态的安全控制,带权限管理的云端下载。此外提供了公用网的域名,天然 CDN 加速,可以从公用网通过 HTTP 的方式访问。



安全方面,云函数可以秒级弹性伸缩不同容器对文件 、资源的操作权限,以及运行配置进行限制,服务有负载防御大流量攻击,全链路上一致性校验,保证服务在链上的安全。


云开发案例

1. 分享二维码优化

二维码解出来的是一堆数字信息,开发可以往里面添加信息生成新的二维码,云开发也提供简单的云调用的方式来快速的生成二维码。因为小程序码受限于复杂度,在现实环境中,扫码环境多变,很不稳定,存储的信息月多,图像越复杂,识别出错的概率也越大。腾讯相册小程序二维码中包含了 name, ownerid, page 等大量信息,在某些机型上无法有效识别。云开发解决方案下,小程序码只需记下一个 ID,具体信息存储在小程序云的数据库中,大大提升识别度大幅。



在云函数中获取到携带信息之后,把信息存入到 DB,得到记录 ID,通过云调用生成小程序码,生成图片传入 cos 中,得到临时 url,你在分享的时候,小程序端通过临时 url 进行分享。


2. 乐享花园

类似于农场的小游戏,可玩性很高,但整体后台很重,脱离后台脱离了后台开发,没有办法获取到授权、access_token,没办法也就无法使用内容审查这样的能力。而使用云开发,云函数中很方便的可以获得用户信息,关于 access_token 也可以使用云函数来维护,access_token 7200 秒有效,可以通过触发器的方式来定时的触发。这样无需为需要调用到微信的接口来准备一个专门的服务器,服务端不关心客户端不同平台定制化的需求,只关心核心的业务能力就行了。


3. 基于实时数据推送的多屏互动

最后一个案例,基于实时数据推送多屏互动的能力,这是最近刚推出的,适用于即使通讯及多人对战。你通过 watch 方法新建数据库数据监听,每当 db 变化的时候,都会实时在 onChange 里面捕获到变动快照,开发者可以根据变动快照来进行下一步的操作,完成多端信息同步。


总结及展望

我们的目标打造多端全栈的应用开发平台,现在云函数支持 node 语言,我们将支持更多的服务语言。SDK 方面已预先支持了 Java、php。在多端方面,除小程序平台外还支持 web,安卓平台,打造更全面的能力。在能力建设上,除基础开发能力外,在质量上会加入日志监控,监控告警等运维能力,方便开发者的管控了解自己的应用。



作者介绍:


杨航,腾讯云前端工程师,负责过腾讯云控制台以及云开发相关业务,涉猎广泛,在前端组价化、以及工程化构建方面有一定的经验,持续关注前端技术发展方向。


本文转载自公众号云加社区(ID:QcloudCommunity)。


原文链接:


https://mp.weixin.qq.com/s/5aTBAHk8CHQH8LVSQIjwsA


2019-10-31 16:591106

评论

发布
暂无评论
发现更多内容

小红书自研小程序:电商体验与效果优化的运行时体系设计

小红书技术REDtech

小程序 前端 小程序运行时

带您了解昇腾模型压缩工具

华为云开发者联盟

人工智能 后端 企业号九月金秋榜

Databend 特性系列(1)|Databend 数据生命周期

Databend

大数据 大数据 开源 数据生命周期

高并发之缓存

源字节1号

软件开发

面试造火箭!连续轰炸50问,我却靠这些"java复习宝典"一一攻克!

收到请回复

Java 云计算 开源 架构 编程语言

算法基础(二)| 高精度算法详解

timerring

算法 9月月更

重磅!阿里首推内部“SpringCloudAlibaba项目文档”这细节讲解,封神!

收到请回复

Java 云计算 开源 架构 编程语言

7.07亿TPC-C背后的技术突破,OceanBase研究成果入选VLDB

OceanBase 数据库

WorkPlus移动应用管理平台 | 政企数字化的超级“连接器”

BeeWorks

阿里大佬力荐6篇实战文档:JVM+多线程+Kafka+Redis+Nginx+MySQL,你确定不看?

收到请回复

Java 云计算 开源 架构 编程语言

华为云快成长直播间大数据&AI专场,加速经济物联网智能化提升

科技怪咖

Paper Time|开放式时空大数据助力智能公交路线规划

OceanBase 数据库

百度App Android启动性能优化-工具篇

百度Geek说

android 性能优化 企业号九月金秋榜

华为云快成长直播ERP专场,以数据驱动企业智慧变革

科技怪咖

一文看懂:什么是CRM系统?有什么用?哪些公司在用?

优秀

CRM系统

全新演绎!美团内部疯传Spring Boot速成手册也太香了叭!

收到请回复

Java 云计算 开源 架构 编程语言

私有化的即时通讯工具能为企业带来哪些帮助?

BeeWorks

新零售数智化转型,需要怎样的数据底座?

OceanBase 数据库

如何设计企业级数据埋点采集方案?

字节跳动数据平台

数据分析 用户增长 埋点 数据应用 埋点设计

“双减”一年,如何让教育回归本质?

旺链科技

区块链 产业区块链 企业号九月金秋榜 教培行业

【云原生】Kubernetes操作精讲

陈橘又青

9月月更

一文带你体验MRS HetuEngine如何实现跨源跨域分析

华为云开发者联盟

大数据 后端 企业号九月金秋榜

京东金融客户端用户触达方式的探索与实践

京东科技开发者

京东 用户 用户触达 widget 推送

推荐|海泰国密通信安全解决方案 助力用户实现安全合规

电子信息发烧客

FreeRTOS记录(八、用软件定时器?还是硬件定时器?)

矜辰所致

软件定时器 FreeRTOS 9月月更

SpringBoot源码 | refreshContext方法解析

六月的雨在InfoQ

源码 springboot 源码阅读 9月月更 refreshContext

“大厂”角力移动办公系统市场,钉钉和企微向左、WorkPlus向右

BeeWorks

【指针内功修炼】字符指针 + 指针数组 + 数组指针 + 指针参数(一)

Albert Edison

C语言 二维数组 9月月更 指针数组 数组指针

MobLink for Flutter

MobTech袤博科技

flutter ios android

变革加速,博睿数据赋能“中国智造”转型升级

博睿数据

可观测性 智能运维 博睿数据

MobLink Android 快速集成文档

MobTech袤博科技

sdk Android;

开发小游戏,云开发真的是银弹吗?(二)_服务革新_云加社区_InfoQ精选文章