写点什么

如何使用云开发数据库构建更生动的小程序?

  • 2020-07-13
  • 本文字数:1941 字

    阅读完需:约 6 分钟

如何使用云开发数据库构建更生动的小程序?

长连接服务被广泛应用在消息提醒、即时通讯、推送、直播弹幕、游戏等场景。本篇文章将介绍云开发数据库的长连接服务 - 实时数据推送,使用它来构建更生动的小程序。

什么是实时数据推送?

通过云开发数据库的实时数据推送能力,小程序端可实时监听数据库变更,即它支持根据开发者给定的查询语句进行监听,每当查询语句的结果发生变化时,小程序端就会收到包含更新内容的推送,并对实时数据变化做出响应。


具体示例如下图:客户端 1 修改数据且符合监听条件,当数据库收到变更时,会将客户端 1 的变更内容推送到其它客户端。


提供哪些能力来帮助开发者构建小程序

自建长连接服务,需要设计繁杂的系统架构,并且有大量的开发工作,使得开发成本较高。当长连接服务开发完成投入使用后,将不可避免的会带来额外的维护工作。对于基础设施、服务安全等维护也需要耗费大量的时间成本和人力成本。此时,开发者可以进行小程序的实际开发工作。接入微信鉴权体系来获取用户登录态、使用微信开放接口等,基于长连接服务来实现具体的业务逻辑。


使用实时数据推送有如下优势:


  1. 零开发


使用实时数据推送无需通过编写服务端代码来自建完整服务,降低了开发成本和开发者的使用门槛,可以将精力聚焦在核心业务的设计与开发上。


  1. 免鉴权


使用实时数据推送无需接入微信鉴权体系,天然集成了原生微信能力,与微信的登录无缝整合,开箱即用,免鉴权获取微信用户信息、使用微信开放接口。减少了开发者对鉴权功能的开发和维护工作。


  1. 零维护


使用实时数据推送无需维护基础设施、安全管理等问题,降低维护成本。

整体架构

大家都听过网上段子说哪有什么岁月静好,只是有人替你负重前行。我们刚才了解了实时数据推送的零开发、零维护、免鉴权等天然优势,那么这些能力岁月静好的背后是谁替它们负重前行呢?让我们来揭开实时数据推送技术架构的神秘面纱。



请求从小程序到接入层经过的是 WebSocket 协议,再到安全校验层进行权限验证。安全校验提供简单的 ACL 标记,也支持高级的数据库安全规则语法实现精细化访问权限控制,可以根据业务实际情况进行选择。对于路由层以及监听推送层,将从可用性、可靠性和性能方面来进行介绍。

可用性

对于服务首当其冲是可用性。首先是异常节点自动剔除来确保在部分节点出现问题时,服务正常可用。实时数据推送路由层通过 Tars 的熔断和自动剔除机制来屏蔽掉异常节点。监听推送层使用 ETCD 实时心跳检测,2 秒上报心跳、6 秒检测到异常,立即执行相关处理逻辑来实现异常节点自动剔除。其次通过一致性哈希方案提升性能、保证可用性。每次长轮询请求都有 QueryID,请求从路由层到监听推送层的对应关系由一致性哈希生成算法,使得监听推送层负载均衡。最后还有相同条件对应相同的 QueryID 来提高性能。

可靠性

从小程序到实时数据推送服务是长轮询且无状态,为业务可靠提供保驾护航。事件自增 ID 可以保证收到推送事件是有序的。此外,对事件进行了本地和 Redis 的两级缓存来确保数据安全。支持客户端掉线 3 分钟,事件不丢失,断线重连后仍能正常按序收到事件。

高性能

实时数据推送服务的性能方面,我们做了一些优化工作:


  1. 使用树的数据结构来保存 watch 条件作为索引,对监听条件匹配索引算法进行优化。

  2. 对于变更事件的匹配,采用多协程并发流水线:匹配事件、推送事件、缓存事件。

  3. 当短时间内有多条符合监听条件的事件产生时,多个事件将会在合并后再推送到客户端。减少了多次推送事件的请求网络耗时,性能提升明显。

简单易用的 API

实时数据推送提供了便捷的 API 供使用。开发者可根据实际场景,按指定集合、查询条件、排序方式、限制返回数量等来实现业务逻辑。更详细的说明可参考微信开放文档 - 云开发实时数据推送。


丰富的应用场景

实时数据推送可以应用到许多实际业务场景中,如即时通信、状态同步以及团队协作等方面。无论是小程序或小游戏都可以使用云数据库的实时数据推送来实现相关场景的实际业务功能。


  1. 即时通信

  2. a. 小程序:直播聊天室、弹幕等

  3. b. 小游戏:区服聊天、房间聊天、私信功能、动态消息等


成语偷菜小游戏就是一个经典的即时通信客户案例,它利用实时数据推送实现了偷菜的动态消息提醒。



下图是在线聊天室 Demo 演示,可在微信开发者工具中开通云开发体验。



  1. 状态同步

  2. a. 小程序:聊天提示状态好友正在输入、好友 1V1 问答 PK 等

  3. b. 小游戏:五子棋等


微信读书每日一答小程序的问答 PK 环节也使用到了实时数据推送,在对答游戏中即时同步双方答题的倒计时、分数、结果等状态。



下图是使用实时数据推送实现的五子棋小游戏,推送服务主要用于同步黑白两手棋子的状态。



  1. 团队协作

  2. a. 在线共享文档

  3. b. 项目管理协作

结语

以上是给大家分享的内容,希望能帮助到各位开发者们更好地应用实时数据推送,为小程序锦上添花。最后,欢迎关注云开发公众号,不定时推送最新功能以及云开发实战高质量技术文章。


2020-07-13 10:191745

评论 1 条评论

发布
用户头像
类似rethinkdb的做法?
2020-07-13 11:32
回复
没有更多了
发现更多内容

1688API接口推荐:1688店铺所有商品数据接口

tbapi

1688API 1688店铺所有商品接口 1688店铺数据接口

移相全桥DC-DC变换器快速设计与开发

芯动大师

芯片 DC-DC 电源控制

梧桐树上凤凰来:“伙伴+华为”体系的建成与强化

脑极体

数智化转型

iot的10种常见协议,特点,组网模式及其使用场景

了了

IoT 技术选型 组网

兼容m1 Lightroom Classic 2021 for mac(lr 2021 中文大师版)

Rose

如何让 iPhone 无线投屏到 Mac 上呢?airserver mac专业投屏工具

Rose

使用 Gateway API 在命名空间之间发送流量

Gingxing

kong API网关 kong-plugin Kong 网关 Kong Gateway

关于云交互与实时的云渲染技术

3DCAT实时渲染

实时云渲染 云交互

SketchUp Pro2023中文集成破解版【含草图大师2023序列号和验证码】

Rose

AI是助力还是取代我们?

Bruce Talk

AI Copilot

C#将异步改成同步方法

百度搜索:蓝易云

C# Linux 运维 Task result

华为联合伙伴发布公共数据授权运营方案,助力云上点数成金

华为云开发者联盟

云计算 华为云 华为云开发者联盟

Github每日热榜2024.03.17

天马行空的大杂烩

程序员 最新 开源软件

在 Windows 上利用Qwen大模型搭建一个 ChatGPT 式的问答小助手

Hunter熊

大模型 cuda Qwen Torch

Vben-Admin 错误 Cannot destructure property 'VITE_GLOB_APP_TITLE' of 't' as it is undefined

麦兜

华为配置Hotspot2.0无线网络示例

知孤云出岫

网络安全

博客平台选择指南:找到适合程序员的完美舞台

程序员何未来

程序人生 写作

如何使用CORS来允许设置Cookie

百度搜索:蓝易云

Linux 运维 CORS Cookie 云服务器

ACCDB MDB Explorer for mac 专业的MDB和ACCDB数据库查看器

Rose

简单实用的鼠标右键助手专业版MouseBoost Pro mac版

Rose

macOS 的专业音乐播放器和 MIDI 文件编辑器QMidi Pro for Mac破解版

Rose

Close,application.Terminate与halt有什么区别

百度搜索:蓝易云

Linux 运维 application Close Terminate

鸿蒙x昇腾云:华为打造智能时代最佳AI基础设施

华为云开发者联盟

鸿蒙 华为云 华为云开发者联盟 AI基础设施 昇腾云

玩转数据-Python数据采集的方法-淘宝商品详情接口

技术冰糖葫芦

API 接口

精美和令人震撼的3D动态桌面壁纸Mach Desktop 4K for Mac

Rose

path finder for mac 激活码 最好用的文件管理浏览器

Rose

Waves12破解版安装教程 Mac版全套音频效果处理工具 支持M1/M2

Rose

详解canal同步MySQL增量数据到ES

百度搜索:蓝易云

MySQL elasticsearch Linux 运维 canal

PHP基本语法解析与应用指南

百度搜索:蓝易云

php html Linux 运维 云服务器

2023 亚马逊云科技 re:Invent 大会探秘:Aurora 无限数据库的突破性应用

亚马逊云科技 (Amazon Web Services)

云计算

如何使用云开发数据库构建更生动的小程序?_服务革新_刘国玮_InfoQ精选文章