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

升级Node.js 23后Gremlin连接Amazon Neptune出现网络错误

Node.js 23下Gremlin连接Amazon Neptune出现WebSocket网络错误的解决办法

问题根源

Node.js 23内置的undici库(处理HTTP/WebSocket请求的核心依赖)对WebSocket握手的默认行为做了变更,不再自动适配Amazon Neptune要求的Gremlin子协议,导致握手时返回非101状态码,触发网络错误。

解决方案

1. 显式指定WebSocket子协议

修改DriverRemoteConnection的配置,添加Sec-WebSocket-Protocol请求头,指定值为gremlin-v3(Neptune要求的Gremlin WebSocket子协议):

export function getGremlinTraversal() {
    if (!g) {
        const neptuneEndpoint = process.env.NEPTUNE_DB_ENDPOINT || '';
        const dc = new DriverRemoteConnection(neptuneEndpoint, { 
            rejectUnauthorized: false,
            headers: {
                'Sec-WebSocket-Protocol': 'gremlin-v3'
            }
        });
        const graph = new Graph();
        g = graph.traversal().withRemote(dc);
    }

    return g;
}

2. 升级Gremlin Driver到兼容版本

确保你的gremlin包是最新版本,新版本已经针对Node.js 23的undici变更做了适配:

npm update gremlin

如果更新后仍有问题,可以尝试锁定版本到3.7.2及以上(该版本开始优化了WebSocket握手逻辑)。

3. 调整WebSocket超时与负载配置(可选)

如果握手超时或负载限制导致问题,可以添加undici的WebSocket专属配置:

const dc = new DriverRemoteConnection(neptuneEndpoint, { 
    rejectUnauthorized: false,
    headers: {
        'Sec-WebSocket-Protocol': 'gremlin-v3'
    },
    websocket: {
        handshakeTimeout: 10000, // 延长握手超时时间至10秒
        maxPayloadLength: 10485760 // 调整最大负载长度为10MB
    }
});

内容的提问来源于stack exchange,提问作者Niño Niel Iroc

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 02:18:19