我在一天内打造了实时协作白板——操作方法

发布: (2026年5月4日 GMT+8 03:20)
3 分钟阅读
原文: Dev.to

Source: Dev.to

它在午夜开始

我有 24 小时,一个免费的 Replit 订阅,以及一个想法:如果我能构建类似 Miro 的东西——但实际上能理解其中的每一行代码呢?

我首先必须解决的核心问题

多人同步听起来很简单,直到你真正去实现它。困难的部分不是发送画布更新——而是弄清楚 要发送什么

// client side
canvas.on('object:modified', (e) => {
  socket.emit('canvas:update', {
    roomId,
    delta: e.target.toObject(['id', 'left', 'top', 'scaleX', 'scaleY'])
  });
});

在服务器端,房间状态保存在内存中,并重新广播给房间内的所有其他客户端。新加入的用户会收到 canvas:init 事件,携带完整的当前状态,以便他们立即同步。

CollabCanvas 实际做了什么

  • 实时多人画布,绘图同步。
  • 为每个已连接用户提供颜色编码的光标显示。

技术栈

  • 前端: React + Vite
  • 后端: 简单的 Node.js 服务器(无数据库)。
  • 画布状态保存在服务器内存中,每个房间的状态在闲置一小时后被清除。这让一天的项目范围保持紧凑,同时仍然功能完整。

让我惊讶的地方

光标同步是我几乎要跳过的功能——但它最终成为演示中最令人印象深刻的部分。看到三个彩色光标在同一画布上独立移动,使多人协作的感觉比仅仅同步绘图更真实。

// client side cursor handling
canvas.on('mouse:move', ({ e }) => {
  const { x, y } = canvas.getPointer(e);
  socket.emit('cursor:move', { roomId, userId, x, y });
});

教训: 打磨存在感特性。它们让多人协作充满活力。

试一试

实时演示部署在 Replit 上。打开两个标签页,在第一个标签页点击链接,然后使用 “Share” 按钮将房间 ID 分享给第二个标签页并开始绘画——你会看到我所说的效果。

https://collab-canvas—dhruvaugust1.replit.app

在 24 小时内为 Replit Buildathon 构建。欢迎反馈。

0 浏览
Back to Blog

相关文章

阅读更多 »