小程序 数据库 时间_使用云开发数据库构建更生动的小程序
导语
长连接服务被广泛应用在消息提醒、即时通讯、推送、直播弹幕、游戏等场景。本篇文章将介绍云开发数据库的长连接服务——实时数据推送,使用它来构建更生动的小程序。什么是实时数据推送?
通过云开发数据库的实时数据推送能力,小程序端可实时监听数据库变更,即它支持根据开发者给定的查询语句进行监听,每当查询语句的结果发生变化时,小程序端就会收到包含更新内容的推送,并对实时数据变化做出响应。
具体示例如下图:客户端1修改数据且符合监听条件,当数据库收到变更时,会将客户端1的变更内容推送到其它客户端。
云开发提供哪些能力支持?自建长连接服务,需要设计繁杂的系统架构,并且伴随大量的开发工作,使得开发成本较高。当长连接服务开发完成投入使用后,将不可避免的会带来额外的维护工作。对于基础设施、服务安全等维护也需要耗费大量的时间成本和人力成本。此时,开发者可以进行小程序的实际开发工作。接入微信鉴权体系来获取用户登录态、使用微信开放接口等,基于长连接服务来实现具体的业务逻辑。具体地,使用实时数据推送有如下优势:
零开发
使用实时数据推送无需通过编写服务端代码来自建完整服务,降低了开发成本和开发者的使用门槛,可以将精力聚焦在核心业务的设计与开发上。
- 免鉴权
使用实时数据推送无需接入微信鉴权体系,天然集成了原生微信能力,与微信的登录无缝整合,开箱即用,免鉴权获取微信用户信息、使用微信开放接口。减少了开发者对鉴权功能的开发和维护工作。
- 零维护
使用实时数据推送无需维护基础设施、安全管理等问题,降低维护成本。
实时数据推送整体架构
有一句流行语:“哪有什么岁月静好,只是有人替你负重前行”,上文提到实时数据推送的零开发、零维护、免鉴权等天然优势,那么这些“岁月静好”的能力背后是谁替它们“负重前行”呢?让我们来揭开实时数据推送技术架构的神秘面纱。
请求从小程序到接入层经过的是 WebSocket 协议,再到安全校验层进行权限验证。安全校验提供简单的 ACL 标记,也支持高级的数据库安全规则语法实现精细化访问权限控制,可以根据业务实际情况进行选择。对于路由层以及监听推送层,下面将从可用性、可靠性和性能方面来进行介绍:
可用性
对于一项服务,其可用性是首先需要关注的问题。首先是异常节点自动剔除来确保在部分节点出现问题时,服务正常可用。实时数据推送路由层通过 Tars 的熔断和自动剔除机制来屏蔽掉异常节点。监听推送层使用 ETCD 实时心跳检测,2秒上报心跳、6秒检测到异常,立即执行相关处理逻辑来实现异常节点自动剔除。其次通过一致性哈希方案提升性能、保证可用性。每次长轮询请求都有 QueryID,请求从路由层到监听推送层的对应关系由一致性哈希生成算法,使得监听推送层负载均衡。最后还有相同条件对应相同的 QueryID 来提高性能。
可靠性
从小程序到实时数据推送服务是长轮询且无状态,为业务可靠提供保驾护航。事件自增 ID 可以保证收到推送事件是有序的。此外,对事件进行了本地和 Redis 的两级缓存来确保数据安全。支持客户端掉线3分钟,事件不丢失,断线重连后仍能正常按序收到事件。
高性能
实时数据推送服务的性能方面,云开发做了一些优化工作:(1)使用树的数据结构来保存 watch 条件作为索引,对监听条件匹配索引算法进行优化。(2)对于变更事件的匹配,采用多协程并发流水线:匹配事件、推送事件、缓存事件。(3)当短时间内有多条符合监听条件的事件产生时,多个事件将会在合并后再推送到客户端。减少了多次推送事件的请求网络耗时,性能提升明显。
简单易用的 API 和丰富的应用场景
实时数据推送提供了便捷的 API 供广大开发者使用。开发者可根据实际场景,按指定集合、查询条件、排序方式、限制返回数量等来实现业务逻辑。更详细的说明可参考微信开放文档——云开发实时数据推送。文档链接:
https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/realtime.html
实时数据推送可以应用到许多实际业务场景中,如即时通信、状态同步以及团队协作等方面。无论是小程序或小游戏都可以使用云数据库的实时数据推送来实现相关场景的实际业务功能。
即时通信
1. 小程序:直播聊天室、弹幕等
2. 小游戏:区服聊天、房间聊天、私信功能、动态消息等
成语偷菜小游戏就是一个经典的即时通信客户案例,它利用实时数据推送实现了偷菜的动态消息提醒。
状态同步
1. 小程序:聊天提示状态好友正在输入、好友1V1问答PK等
2. 小游戏:五子棋等
微信读书每日一答小程序的问答PK环节也使用到了实时数据推送,在对答游戏中即时同步双方答题的倒计时、分数、结果等状态。
团队协作
1. 在线共享文档
2. 项目管理协作
结语
以上内容,希望能帮助到各位开发者更好地应用实时数据推送,为小程序锦上添花。最后,欢迎关注云开发公众号,不定时推送最新能力以及云开发实战高质量技术文章。
作者:刘国玮,腾讯云云开发团队后台开发工程师。☁
更多精彩
点击下方图片即可了解
△ 新能力|云开发 VS Code 插件 CloudBase Toolkit 正式发布
由于公众号推送规则更改,请多多分享、点赞和“在看”,以及时获取云开发Cloudbase的最新动态。
点击在看让更多人发现精彩
小程序 数据库 时间_使用云开发数据库构建更生动的小程序相关推荐
- 使用云开发数据库构建更生动的小程序
长连接服务被广泛应用在消息提醒.即时通讯.推送.直播弹幕.游戏等场景.本篇文章将介绍云开发数据库的长连接服务 - 实时数据推送,使用它来构建更生动的小程序. 什么是实时数据推送 通过云开发数据库的实时 ...
- 如何监控mysql数据库时间_如何监控MySQL数据库主从之间的延时
日常工作中,对于MySQL主从复制检查,一方面我们要保证复制的整体结构是否正常,另一方面需要检查主从数据是否保持一致.对于前者我们可以通过监控复制线程是否工作正常以及主从延时是否在容忍范围内,对于后者 ...
- 云开发数据库VS传统数据库丨云开发101
云开发数据库与传统数据库的不同 在小程序·云开发中,最核心的便是三大组件:数据库.云存储和云函数,从今天开始,我们将开始隔日更的专栏文章,云开发101,在第一周,我们将从最最核心的数据库开始说起. 云 ...
- access 根据id删除数据_小程序云开发之数据库自动备份丨云开发101
钻石有价,数据无价.我们通常会把重要的业务数据存放在数据库中,并需要对数据库做定时的自动备份工作,防止数据异常丢失,造成无法挽回的损失. 小程序云开发提供了方便的云数据库供我们直接使用,云开发使用了腾 ...
- access重复数据累计_小程序·云开发之数据库自动备份丨云开发101
小程序云开发之数据库自动备份 数据是无价的,我们通常会把重要的业务数据存放在数据库中,并需要对数据库做定时的自动备份工作,防止数据异常丢失,造成无法挽回的损失. 小程序云开发提供了方便的云数据库供我们 ...
- 微信小程序云开发 mysql_微信小程序云开发数据库
如在云开发数据库的基础介绍中所说,云开发提供了一个 JSON 数据库,本章将介绍以下内容: 上手:用控制台创建我的第一个集合,插入我的第一条数据 数据类型:了解数据库提供的数据类型 权限控制:控制集合 ...
- 解密小程序云开发数据库
作者:phoenixxliu,腾讯 TEG 后台开发工程师 目录: 导语 一.背景 二.竞品分析 三.需求和挑战 四.架构和方案 五.总结和展望 导语 小程序云开发(Tencent CloudBase ...
- 微信小程序+云开发+数据库使用
微信小程序+云开发+数据库使用 参考地址:https://developers.weixin.qq.com/miniprogram/dev/wxcloud/guide/database/read.ht ...
- 小程序 云开发 数据库操作
开发者可以使用云开发开发微信小程序.小游戏,无需搭建服务器,即可使用云端能力. 云开发为开发者提供完整的云端支持,弱化后端和运维概念,无需搭建服务器,使用平台提供的 API 进行核心业务开发,即可实现 ...
最新文章
- python程序不出结果_超详细的Python入门教程,1小时就可以学会
- linux mysql 1045 错误_Linux 下,mysql数据库报无法登陆错误:ERROR 1045 (28000): Access denied for use...
- linux查找文件里面的内容
- 【正一专栏】恒大中超七连冠到手了
- 《算法竞赛进阶指南》打卡-基本算法-AcWing 92. 递归实现指数型枚举:递推与递归、二进制状态压缩、dfs
- 网络编程中的超时检测
- 婚宴座位图html5,图解现代婚宴座位安排
- 未来标准化、低风险的P2P模式
- 原根求解算法 NTT算法
- Mybatis拦截器
- Python 数据分析微专业课程--项目实战09 房价影响因素挖掘1.项目说明2.项目具体要求3.实现思路:4.实现过程:5.结论:
- mysql同时满足升序和降序_mysql中的升序和降序以及一个字段升序和一个字段降序...
- 只有360浏览器能打开别的都打不开
- WebStorm、Idea使用git账户密码重置
- 将电脑的无线网通过有线分享给其他设备
- JUC(二):Java 线程预备知识
- python制作节日贺卡
- 超详细的编码实战,让你的springboot应用识别图片中的行人、汽车、狗子、喵星人(JavaCV+YOLO4)
- Flutter Win桌面应用环境配置
- SQL学习笔记——Select查询语句