You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

@hocuspocus/server:后端存储失败时通知客户端的实现方案

onStoreDocument钩子数据库保存失败后的客户端处理方案

问题1:如何在客户端标记文档未同步?

  • 在客户端维护本地状态字段,比如isSynced,发起更新请求时设为false,收到服务器同步成功通知后改回true;若收到错误通知则保持false,UI根据这个状态展示“未同步”标识(如红色提示、感叹号)。
  • 也可以给文档添加临时自定义属性(如_syncPending),更新前标记为true,同步成功后移除该属性;同步失败则保留标记,客户端监听文档属性变化,据此展示未同步状态。

问题2:能否向客户端发送错误消息?如何在onStoreDocument中访问connection.sendStateless?

  • 可以向客户端发送错误消息,获取connection对象的方式如下:
    1. 检查钩子上下文参数:部分实时协作框架的onStoreDocument钩子会传入包含connection的上下文对象(如{ connection, doc }),直接从中取出connection后调用connection.sendStateless发送自定义错误事件。
    2. 建立文档与连接的映射:在连接建立时(如onConnect钩子),将文档ID和对应的connection存入全局Map;在onStoreDocument中通过文档ID找到对应连接,再调用sendStateless,示例代码:
      // 全局存储文档ID与连接的映射
      const docConnections = new Map();
      
      // 连接建立时关联文档与连接
      onConnect((connection, doc) => {
        docConnections.set(doc.guid, connection);
      });
      
      // onStoreDocument中处理错误并发送消息
      onStoreDocument(async (doc) => {
        try {
          await saveToDatabase(doc); // 数据库保存逻辑
        } catch (error) {
          const connection = docConnections.get(doc.guid);
          if (connection) {
            connection.sendStateless({
              type: 'sync-failure',
              msg: error.message,
              docId: doc.guid
            });
          }
        }
      });
      
    3. 广播错误事件:若无需定向到单个客户端,可使用框架提供的广播方法,将错误消息发送给所有订阅该文档的客户端,由客户端自行处理。

内容的提问来源于stack exchange,提问作者Alexey Victorov

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 02:04:52