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

Hyperledger Caliper中如何关闭WebSocket连接?

关闭Hyperledger Caliper打开的WebSocket连接

1. 在测试脚本中添加手动清理逻辑

Caliper的以太坊适配器基于web3.js,正常情况下测试结束会自动销毁客户端连接,但如果出现泄漏,可在测试脚本的清理阶段手动触发断开:
在你的测试脚本(如test.js)中补充清理函数,获取客户端实例并调用断开方法:

module.exports = {
    run: async function() {
        // 你的测试执行逻辑
    },
    cleanup: async function() {
        const ctx = require('@hyperledger/caliper-core').getDefaultContext();
        const client = ctx.getConnectorClient();
        // 针对web3.js的WebSocket Provider执行断开
        if (client?.web3?.currentProvider?.disconnect) {
            await client.web3.currentProvider.disconnect();
        }
    }
};

2. 强制终止残留的Worker进程

如果测试结束后Worker进程未正常退出,会导致WebSocket连接持续占用,可手动清理进程:

  • Linux/macOS:执行命令定位并终止进程
ps aux | grep caliper | grep -v grep | awk '{print $2}' | xargs kill -9
  • Windows:打开任务管理器,找到所有关联的Node.js进程并结束

3. 配置WebSocket心跳机制自动回收无效连接

在config.json的以太坊配置中添加WebSocket心跳参数,让连接在闲置或异常时自动断开:

{
    "caliper": {
        "blockchain": "ethereum"
    },
    "ethereum": {
        "url": "ws://<ws_url>",
        "nonceManager": "managed",
        "options": {
            "clientConfig": {
                "keepalive": true,
                "keepaliveInterval": 60000,
                "reconnect": false
            }
        }
        // 其他配置项
    }
}

4. 修复适配器的连接泄漏(临时方案)

若为Caliper以太坊适配器的固有bug,可修改适配器代码强制断开连接:
找到Caliper安装目录下的@hyperledger/caliper-ethereum/lib/ethereum.js,在disconnect方法中补充连接清理逻辑:

async disconnect() {
    // 新增WebSocket断开逻辑
    if (this.web3?.currentProvider?.disconnect) {
        await this.web3.currentProvider.disconnect();
    }
    // 保留原有适配器断开逻辑
    // ...
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 11:27:01