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

如何通过WebSocket加载Yjs文档?连接成功但无法加载

解决Y.Doc通过y-websocket无法加载的问题

以下是几个具体的排查和修复方向:

1. 修正getText()的调用方式

Y.Doc的getText()需要传入对应文本类型的键名,比如服务器端创建文本时用的是doc.getText('default'),就需要传'default'作为参数。你当前直接调用doc.getText(),相当于获取键名为空字符串的文本类型,若服务器端文档没有这个键的内容,就会返回空值。

修改示例:

// 替换为服务器端实际使用的文本键名
console.log(doc.getText('default').toString());

2. 确认WebsocketProvider的room参数

初始化WebsocketProvider时的第二个参数是房间名,部分y-websocket服务器会用这个参数关联文档。即使你把doc id放在了endpoint里,也建议将该参数设置为你的文档ID,确保和服务器端的文档标识匹配:

修改示例:

const websocketProvider = new WebsocketProvider(endpoint, id, doc, {
    connect: false,
    params,
    WebSocketPolyfill: WebSocket,
});

3. 验证accessToken的有效性与传递

检查accessToken是否正确,同时在浏览器Network面板查看WebSocket连接的请求URL,确认?at=xxx参数是否正常附加。如果权限校验失败,服务器可能不会返回文档数据,导致doc无法加载。

4. 补充文档加载的手动触发逻辑

虽然设置了doc.autoLoad = true,但可以在synced事件中手动触发加载(防止autoLoad未生效):

websocketProvider.on('synced', () => {
    channel.printLine('Synced');
   
    if (!doc.isLoaded) {
        doc.load();
    }

    console.log('is doc loaded: ' + doc.isLoaded.toString());
    console.log('is doc synced ' + doc.isSynced.toString());
    console.log(doc.getText('default').toString());
});

5. 排查服务器端状态

如果以上操作都无效,建议查看y-websocket服务器的日志,确认是否收到文档请求、权限校验是否通过、目标文档是否存在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 13:47:46