在本教程中,你将部署一个使用 Durable Objects 运行的无服务器实时聊天应用。
该聊天应用使用 Durable Object 来控制每个聊天室。用户通过 WebSocket 连接到该 Object。来自一位用户的消息会广播给所有其他用户。聊天记录也会存储在 durable storage 中。实时消息会直接从一位用户转发给其他用户,无需经过存储层。
所有教程都假设你已经完成了快速入门指南,该指南帮助你设置 Cloudflare Workers 账户、C3 ↗ 和 Wrangler。
打开终端并克隆 workers-chat-demo ↗ 仓库:
git clone https://github.com/cloudflare/workers-chat-demo.git克隆仓库后,运行以下命令验证 Wrangler:
npx wrangler login准备部署应用时,运行:
npx wrangler deploy你的应用将部署到 *.workers.dev 子域名。
要在 Cloudflare 仪表板中将应用部署到自定义域名,请前往你的 Worker > Triggers(触发器) > Add Custom Domain(添加自定义域)。
要使用 Wrangler 将应用部署到自定义域名,请打开项目的 Wrangler 配置文件。
要在 Wrangler 配置文件中配置路由,请在环境中添加以下内容:
{
"routes": [
{
"pattern": "example.com/about",
"zone_id": "<YOUR_ZONE_ID>"
}
]
}[[routes]]
pattern = "example.com/about"
zone_id = "<YOUR_ZONE_ID>"如果你在 Wrangler 配置文件的环境变量中指定了 zone ID,则无需再以对象形式填写。
要在 Wrangler 配置文件中配置子域名,请在环境中添加以下内容:
{
"routes": [
{
"pattern": "subdomain.example.com",
"custom_domain": true
}
]
}[[routes]]
pattern = "subdomain.example.com"
custom_domain = true测试实时应用:
-
在 Cloudflare 仪表板中,前往 Workers & Pages 页面。
Go to Workers & Pages ↗ -
选择你的 Worker > Triggers(触发器) > Routes(路由) > 选择
edge-chat-demo.<SUBDOMAIN>.workers.dev路由。 -
在 your name(你的姓名) 字段中输入名称。
-
选择进入公共房间或创建私人房间。
-
将链接发送给其他参与者。你可以在屏幕右侧查看房间参与者。
要卸载聊天应用,请修改 Wrangler 文件,移除 durable_objects 绑定,并添加 deleted_classes 迁移:
{
"durable_objects": {
"bindings": []
},
// Indicate that you want the ChatRoom and RateLimiter classes to be callable as Durable Objects.
"migrations": [
{
"tag": "v1",
"new_sqlite_classes": [
"ChatRoom",
"RateLimiter"
]
},
{
"tag": "v2", // Should be unique for each entry
"deleted_classes": [
"ChatRoom",
"RateLimiter"
]
}
]
}[durable_objects]
bindings = [ ]
[[migrations]]
tag = "v1"
new_sqlite_classes = [ "ChatRoom", "RateLimiter" ]
[[migrations]]
tag = "v2"
deleted_classes = [ "ChatRoom", "RateLimiter" ]然后运行 npx wrangler deploy。
删除 Worker:
-
在 Cloudflare 仪表板中,前往 Workers & Pages 页面。
Go to Workers & Pages ↗ -
在 Overview(概览) 中,选择你的 Worker。
-
选择 Manage Service(管理服务) > Delete(删除)。有关完整设置和删除说明,请参阅克隆仓库中的
README.md。
完成本教程后,你已使用 Durable Objects 和 Cloudflare Workers 部署了一个实时聊天应用。
继续探索以下其他 Cloudflare Workers 教程。