探索 Tiptap V3 的最新功能

集成协作提供者

协作提供者与协作后端一起,构成了实时协同编辑的基础架构。它们建立并管理用户之间的通信通道,确保文档的更新和更改在所有参与者之间同步。

提供者处理实时数据交换的复杂性,包括冲突解决、网络可靠性和用户在线状态感知。

TiptapCollabProvider 增加了针对协作环境的高级功能,如 WebSocket 消息认证、调试模式和灵活的连接策略。

设置提供者

首先,在您的项目中使用以下命令安装提供者包(确保使用提供者 v2,因为 v3 需要 Tiptap v3,而 Tiptap v3 仍处于测试阶段):

Set up private registry

请注意,您需要按照这里的说明设置对私有注册表的访问。

此外,您可能需要将以下行添加到您的 .npmrc 文件中:

@tiptap-cloud:registry=https://registry.tiptap.dev/
npm install @tiptap-cloud/provider

基本设置中,通过指定文档名称、您的应用 ID(云端设置)或基础 URL(本地部署),以及 JWT 令牌来连接协作后端。

根据您的框架,注册连接到协作后端的回调,如 React 中的 useEffect() 或 Vue.js 中的 onMounted()

const doc = new Y.Doc()

useEffect(() => {
  const provider = new TiptapCollabProvider({
    name: note.id, // 文档标识符
    appId: 'YOUR_APP_ID', // 替换为云端控制台中的 YOUR_APP_ID
    token: 'YOUR_JWT', // 认证令牌
    document: doc,
    user: userId,
  })
}, [])

本地部署用户的提示

如果您在本地托管协作环境,请在提供者配置中用 baseUrl 替换 appId 参数,以连接到您的服务器。

配置协作提供者

Tiptap 协作提供者支持多种设置,用于自定义配置。请查看下表,了解所有参数、实际用例及诸如“awareness”等关键概念。

设置名默认值说明
appId''(空字符串)适用于协作云端的应用标识
baseUrl''(空字符串)用于连接本地服务器的 URL。作为 appId 的替代选项,适用于本地部署
name''(空字符串)文档名称
token''(空字符串)认证令牌,用于安全连接。支持字符串、函数和 Promise
documentnew Y.Doc()Yjs 文档实例。若未提供,则默认为新文档
usernull用户 ID 或名称,用于标注文档更改
connecttrue初始化后是否连接服务器
preserveConnectiontrue关闭提供者后是否保持 WebSocket 连接
broadcasttrue是否启用不同浏览器标签页之间的文档同步
forceSyncIntervalfalse是否按固定间隔(毫秒)强制进行服务器同步
quietfalse是否抑制警告信息输出
WebSocketPolyfillWebSocketNode.js 环境的 WebSocket 实现。可以使用 ws 或其他实现

优化重连时间

提供者的重连设置预设为生产环境的最佳性能。如需针对特定场景调整这些参数,可通过延迟配置完成。

您可以调整初始延迟、应用指数退避,或设置最大等待时间,以微调应用的重连行为,平衡响应速度和服务器效率。

设置名默认值说明
delay1000两次重连尝试之间的基础延迟,单位毫秒
factor2延迟倍率,每次尝试后指数级增加
initialDelay0第一次重连尝试前的延迟时间,单位毫秒
maxAttempts0最大重连尝试次数。0 表示无限次
jittertrue是否添加抖动,通过在 minDelay 和计算延迟之间随机选取值增加重连的随机性
minDelay1000启用抖动时的最小延迟。如果禁用抖动则无效
maxDelay30000重连尝试之间允许的最大延迟。设置为 0 时,延迟将无限制增长,遵循指数退避(factor)规律
timeout0每次重连尝试的最大持续时间,单位毫秒,超时则停止尝试
messageReconnectTimeout30000等待服务器消息的时间上限,单位毫秒。若未收到消息,连接将自动关闭

速率限制

为维护系统稳定性并防止配置错误的客户端,我方基础设施(包括管理 API 和通过 TiptapCollabProvider 的 WebSocket 连接)均受速率限制管理。

默认速率限制(每来源 IP):

  • 请求数: 100 次
  • 时间窗口: 5 秒
  • 突发容量: 最多 200 次请求

如在正常使用情况下遇到限制,请通过电子邮件联系我们。