Hola r/Devvit! 我想与大家分享一个使用 Devvit Web 构建的项目: Pixel War: Sub Edition,这是一个将 r/Place 体验带入.subreddits 个性化的app。

🎮 以下是项目功能

- 一个64x64到256x256的协作画布(pixel canvas),让 subreddit成员可以在实时进行绘画

-可由mod配置的缓冲机制(10秒至60分钟)

- 排行榜显示前十名贡献者

- 每个像素的历史记录(谁放置并何时)

- 来自 r/Place 的 17 色调色板

- 与移动设备兼容(支持缩放和触摸)

- 由管理者创建的主题轮盘

🛠️ 技术栈

- Devvit Web(React + Hono + Tailwind CSS)

- Redis用于canvas状态、缓冲和排行榜的状态

- 使用短轮询(每约2秒)来在实时进行用户同步

- 使用HTML Canvas API进行canvas渲染,支持缩放和触摸

✨ 其他技术细节

canvas管理: 每个像素存储在Redis像素 hash 中,包含“color”、“author”和“timestamp”。整个画布作为一个压缩的数组通过Redis提供。短轮询(每约2秒)将发送自上次轮询以来更改的像素以最小化数据。

缓冲用户: 使用TTL(Time-To-Live) Redis.set 跟踪每个player个人的缓冲。缓冲时间过期后,玩家可以继续绘制。

排行榜: 使用Redis.sorted set 的zIncrBy和zRange功能来累积玩家每个像素的得分,并使用sorted set 来获得top10得分。

自动化初始化: 当应用程序安装在一个subreddit上时触发onAppInstall事件来自动创建一个64x64大小的欢迎画布。

🚀 项目展示

该项目已在r/pixelwarsub_dev上线。你可以尝试试用并向我们提供建议!

使用Devvit Web时短轮询vs,webSockets的经验: 在 Devvit Web 应用中实现实时性时,有人有先前的经验吗?我很好奇您的想法。