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

Neptune Engine升级至1.1.1与Gremlin 3.5.3后出现WebSocket连接错误求助

问题分析与解决方案

你遇到的WebSocket is not open: readyState 2 (CLOSING)错误,核心原因是连接被服务器主动关闭后仍被复用,结合Neptune 1.1.1和Gremlin 3.5.3的版本特性,主要和连接保活机制、连接复用逻辑有关,具体调整方案如下:

1. 启用WebSocket Ping保活机制

当前代码中pingEnabled:false会关闭驱动的心跳检测,而Neptune 1.1.1默认会清理空闲超过一定时间的连接。当连接被服务器标记为关闭状态后,代码仍尝试复用该连接,就会触发这个错误。

修改连接配置,启用ping并合理设置参数:

const dc = new DriverRemoteConnection(
  `wss://${process.env.NEPTUNE_HOST}:${process.env.NEPTUNE_PORT}/gremlin`,
  {
    pingEnabled: true,
    pingInterval: 30000, // 30秒发送一次心跳
    pingTimeout: 10000   // 心跳超时时间
  }
);

2. 修复连接复用的逻辑漏洞

当前代码通过全局变量dc复用连接,但没有检查连接的当前状态。如果连接已经被服务器关闭(readyState为CLOSING或CLOSED),直接复用会报错。需要在使用前增加状态检查,失效时重新建立连接:

const DriverRemoteConnection = gremlin.driver.DriverRemoteConnection;
const Graph = gremlin.structure.Graph;

function getConnection() {
  // 检查连接是否存在且处于开放状态
  if (typeof dc === 'undefined' || dc._connection.readyState !== 1) {
    // 关闭旧连接(如果存在)
    if (dc) {
      dc.close();
    }
    // 重新创建连接
    dc = new DriverRemoteConnection(
      `wss://${process.env.NEPTUNE_HOST}:${process.env.NEPTUNE_PORT}/gremlin`,
      {
        pingEnabled: true,
        pingInterval: 30000,
        pingTimeout: 10000
      }
    );
  }
  return dc;
}

3. 额外配置建议

  • 监听连接的错误和关闭事件,及时处理连接失效:
    dc.on('error', (err) => {
      console.error('Connection error:', err);
      dc = undefined;
    });
    
    dc.on('close', () => {
      console.log('Connection closed');
      dc = undefined;
    });
    
  • 确认Neptune集群的空闲连接超时配置,确保ping间隔小于超时时间,避免连接被主动清理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:02:28