使用 Deno KV 中新的 "watch" API 构建实时应用程序
Deno KV 是我们内置于运行时的 ACID 兼容键值数据库,它朝着我们彻底简化云开发的愿景迈出了一大步,通过消除样板代码和配置。 您无需再处理 API 密钥和配置数据库,而只需一行代码即可连接到数据库。
我们一直在为 Deno KV 推出大量功能,例如 一个开源的自托管服务器,能够 远程连接到托管的 Deno KV 实例,以及 持续备份到对象存储。 但是今天,我们推出了一个将简化构建整个实时应用程序类别的新功能 - kv.watch
:
从 Deno 1.38.5 和 Deno Deploy 开始支持,kv.watch
允许您监听 Deno KV 密钥的更改,从而简化构建
- 实时 UI 更新,例如社交媒体新闻提要或通知
- 聊天应用程序或聊天室,例如 Slack 和 Discord
- 协作编辑器,例如 Google 文档
在本博文中,我们将介绍
.watch()
👀 函数
新的 新的 .watch()
函数接受一个键数组,并返回一个 ReadableStream
,每当监听的键更改其 versionstamp
时,该流就会发出一个新值。
在下面的示例中,我们监听键 ["foo"]
和 ["bar"]
的更新
const db = await Deno.openKv();
const stream = db.watch([["foo"], ["bar"]]);
for await (const entries of stream) {
entries[0].key; // ["foo"]
entries[0].value; // "bar"
entries[0].versionstamp; // "00000000000000010000"
entries[1].key; // ["bar"]
entries[1].value; // null
entries[1].versionstamp; // null
}
请注意,单个 kv.watch
调用中可以传递的最大键数为 10。
为了将 kv.watch
添加到网站或应用程序中,您需要将其与服务器端事件或 WebSockets 一起使用。
构建实时更新
为了提供更实际的示例,以下代码使用 kv.watch
监听帖子的评论和点赞数的更改,然后使用 服务器发送事件 将其分发到客户端。
import { Application, Router } from "https://deno.land/x/oak/mod.ts";
const app = new Application();
const router = new Router();
// Send server side event on every activity on this blog post.
router.get("/api/blog_post_updates", async (ctx) => {
const target = ctx.sendEvents();
const postId = ctx.url.searchParams.get("post_id");
for await (
const [{ value: lastCommentId }, { value: likeCount }] of kv.watch([
["lastCommentId", postId],
["likeCount", postId],
])
) {
target.dispatchMessage({ lastCommentId, likeCount });
}
});
app.use(router.routes());
await app.listen({ port: 80 });
客户端需要在端点 /api/blog_post_updates
创建连接。 然后,客户端将收到带有新评论和点赞数的服务器端事件,它可以在 HTML 中呈现这些事件。 然后,UI 将呈现更新,而无需重新加载页面。
在 Deno Deploy 上监听更新
Deno Deploy 上的 Deno KV 是一个集成的解决方案,用于可扩展、可靠和 ACID 兼容的存储,包含构建现代应用程序所需的所有基本元素
无论隔离区在哪个区域运行,kv.watch
更改通知都会以最小的延迟传递到隔离区。 借助我们在 FoundationDB 之上构建的 高性能事务处理架构,kv.watch
可以扩展到数十万个并发客户端。
价格
Deno Deploy 上的 Deno KV 定价没有变化。 但是,每当 kv.watch
的 ReadableStream
响应中返回一个条目时,它都将被视为一次“读取”。
更多用例和示例
为了提供更多关于使用 kv.watch
的示例,我们已更新 Deno KV 演示应用程序以包含 KV watch
这些示例让您了解可以使用 Deno KV watch 构建的实时或多用户协作应用程序。
更多资源
下一步
Deno KV 与其他云基本元素(如 Deno Queues 和 Deno Cron)一起内置于运行时,这使您可以更快地构建,而无需担心配置、配置或扩展基础设施。 Deno KV 的新 kv.watch
通过让您检测 Deno KV 的更改来进一步简化实时应用程序的构建。
我们始终欢迎反馈和功能请求! 请随时 加入我们不断壮大的 Discord 或 在此创建问题。
我们刚刚发布了 Deno Cron! 🦕🕒
在 Deno Deploy 上几分钟内创建计划作业。