写点什么

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

  • 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:191833

评论 1 条评论

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

AtomGit MCP 服务正式上架

开放原子开源基金会

0.2秒"神"同步!网易伏羲具身智能全栈方案发布,携手无论科技共拓人形机器人产业新蓝海

网易伏羲

人工智能 智能机器人 网易伏羲 具身智能 有灵众包

什么是链游,链游系统开发价格以及方案

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

Topaz ReMask 5 for Mac/win(ps抠图滤镜) 汉化激活版

Rose

Experience Design中文激活版 for mac(XD界面设计和原型交互工具)

Rose

工作三年Java程序员的一点点体会与建议

Geek_Yin

Java 程序员 java面试 Java面试题

Java面试题及答案整理(金九银十突击版)

Geek_Yin

Java 程序员 java面试 Java面试题

Redis持久化机制

量贩潮汐·WholesaleTide

redis

JAVA实现读取最后几行日志

电子尖叫食人鱼

Java

VNC Server for Mac(VNC远程控制软件) v6.11.0激活版

Rose

低代码与传统开发大揭秘,教你快人一步

伤感汤姆布利柏

MCP Server 实践之旅第 3 站:MCP 协议亲和性的技术内幕

阿里巴巴云原生

阿里云 Serverless 云原生

2025 StartDT Day 发布会全回顾

奇点云

AI

DeepSeek-R1-0528正式上线网心科技算力云平台

网心科技

基于YOLOv8的坐姿标准姿态检测项目【完整源码数据集+PyQt5界面+完整训练流程+开箱即用!】

申公豹

yolo

Taro on Harmony C-API 版本正式开源

京东科技开发者

Permute 3.13.1 :轻松将您的媒体文件转换为各种不同的格式

Rose

区块链交易所开发:开启数字货币交易新时代

区块链软件开发推广运营

交易所开发 dapp开发 区块链开发 公链开发 代币开发

Web前端入门:JavaScript 各种对象定义与对象取值方法

不在线第一只蜗牛

JavaScript 前端 Web

在鸿蒙开发中实现自定义进度条

幽蓝计划

人工智能产品测试 | 模型:特征与权重的数据库

测试人

人工智能

从概念表达到安全验证:智能驾驶功能迎来系统性规范

DevOps和数字孪生

智能驾驶

图片组件|纯血鸿蒙组件库AUI

华哥的全栈次元舱

鸿蒙开发 鸿蒙app开发 AI极客 纯血鸿蒙组件库 免费的低代码平台

解剖DeepSeek四把刀,一场深到源码,大到行业,细到人心的手术盛宴

京东科技开发者

VMware Fusion 12许可密钥 VM虚拟机Mac版

Rose

再赴苍穹!神舟二十号发射取得圆满成功,开启中国航天新篇章

DevOps和数字孪生

航空航天

HarmonyOS运动开发:精准估算室内运动的距离、速度与步幅

王二蛋和他的张大花

鸿蒙

备战金九银十,Java面试题总结,苦战30天拿下高薪Java岗!

程序员高级码农

Java 程序员 java面试

Red Giant Universe for Mac(AE红巨星特效插件包)v2025.3.0激活版

Rose

潜入深蓝:SkyEye与中国深海探测技术共振

DevOps和数字孪生

揭秘区块链浏览器开发:从架构到落地的全链路指南

区块链软件开发推广运营

交易所开发 dapp开发 链游开发 公链开发 代币开发

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