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

摘要:
本文将介绍云开发数据库的长连接服务——实时数据推送,并使用它构建更生动的小程序。此时,开发人员实际上可以开发小程序。实时数据推送的免认证使用不需要访问微信认证系统。它自然地集成了微信的原始功能,与微信登录无缝集成,并且开箱即用。使用微信用户信息的免认证访问和微信开放界面。更多详情请参考微信开放文档-云开发实时数据推送。使用云开发,您可以快速构建完整的小程序/游戏、H5、Web、移动应用程序和其他应用程序。

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

什么是实时数据推送

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

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

img

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

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

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

  1. 零开发

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

  1. 免鉴权

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

  1. 零维护

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

整体架构

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

img

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

可用性

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

可靠性

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

高性能

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

  1. 使用树的数据结构来保存watch条件作为索引,对监听条件匹配索引算法进行优化。
  2. 对于变更事件的匹配,采用多协程并发流水线:匹配事件、推送事件、缓存事件。
  3. 当短时间内有多条符合监听条件的事件产生时,多个事件将会在合并后再推送到客户端。减少了多次推送事件的请求网络耗时,性能提升明显。

简单易用的API

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

img

丰富的应用场景

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

1. 即时通信

(1)小程序:直播聊天室、弹幕等

(2)小游戏:区服聊天、房间聊天、私信功能、动态消息等

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

img

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

img

2. 状态同步

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

(2)小游戏:五子棋等

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

img

下图是使用实时数据推送实现的五子棋小游戏,推送服务主要用于同步黑白两手棋子的状态。开发五子棋的带源码教程可以看这里:https://club.cloudbase.net/2019-09-03-share-gomoku/#_1-项目概述

img

3. 团队协作

(1)在线共享文档

(2)项目管理协作

结语

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

本分享课程视频可以在这里查看:https://cloud.tencent.com/developer/salon/live-1234

云开发(CloudBase)是云端一体化的后端云服务,采用 serverless 架构,免去了移动应用构建中繁琐的服务器搭建和运维。同时云开发提供的静态托管、命令行工具(CLI)、Flutter SDK 等能力极大的降低了应用开发的门槛。使用云开发可以快速构建完整的小程序/小游戏、H5、Web、移动 App 等应用。

免责声明:文章转载自《使用云开发数据库构建更生动的小程序》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇SDWebImage播放GIF图oracle字符集的查看和修改下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Canal使用小结

Canal使用小结 之前公司存在mysql数据同步mongo的需求,可以有多种实现方式,比如硬编码,发送消息等。公司选择的是Canal中间件,最近有空来研究下他的使用方式,对于mysql数据变更监听有需求的应用场景都可以使用它。 参考:https://yq.aliyun.com/articles/14570 Canal介绍 基于mysql数据库binl...

RabbitMQ学习07--消息重复消费

幂等性操作 :可以重复执行的操作,可以不用保证消息重复消费。 非幂等性,需要保证消息不会被重复消费。 重复消费原因:消费者消费了消息,但并没有向rabbitmq发送ack。 为了解决消费重复消费的问题,可以使用Redis,在消费者消费之前,先将消息的id放到Redis中, id-0(正在执行业务) id-1(业务执行成功) 如果ack失败,在RabbitM...

Window API 之 PostMessage (消息投递)

PostMessage: 将一条消息投递到指定窗口的消息队列。投递的消息会在Windows事件处理过程中得到处理。 在那个时候,会随同投递的消息调用指定窗口的窗口函数。特别适合那些不需要立即处理的 窗口消息的发送返回值 。自己的理解是:通过这个函数,可以将自己想发送的消息发送到你想发送的窗口。就好比是两个人在发短信,那么这个函数就相当于是一部手机。查找资料...

探究 Redis 4 的 stream 类型

 redis 2 10 月初,Redis 搞了个大新闻。别紧张,是个好消息:Redis 引入了名为 stream 的新数据类型和对应的命令,大概会在年底正式发布到 4.x 版本中。像引入新数据类型这样的变化在 Redis 的发展历史上非常罕见,所以称之为大新闻一点也不为过。至少很多介绍 Redis 的资料要跟着修订了。 背景 按作者的介绍,strea...

TCP协议知识整理(报文、握手、挥手、重传、窗口、拥塞)

1.概念 传输控制协议(TCP,Transmission Control Protocol)是一种面向连接的、可靠的、基于字节流的传输层通信协议。 面向连接:一定是「一对一」才能连接,不能像 UDP 协议 可以一个主机同时向多个主机发送消息,也就是一对多是无法做到的; 可靠的:无论的网络链路中出现了怎样的链路变化,TCP 都可以保证一个报文一定能够到达接...

UCOSII使用之信号量,邮箱

信号量在ucos-II中,为了实现任务之间的同步,用到的同步机制有:信号量,邮箱和消息队列。其中这里我主要说下对信号量的使用经验。信号量在创建时,      调用OSSemCreate(INT16U cnt)函数。cnt为信号量的初始值。对cnt赋予不同的值,所起到的作用不同。如果Semp = OSSemCreate(0), 该信号量表示等待一个事件或者多...