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

阅读数:109 2019 年 10 月 31 日 16:59

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

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

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

评论

发布