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

如何在k6中解码WebSocket返回的gzip压缩字符串?

在k6中解压缩WebSocket压缩消息并解析为JSON

k6基于Go的V8运行环境,没有浏览器的window对象,所以浏览器版本的pako库无法直接使用。你可以通过以下两种方案解决:

方案一:使用k6内置的zlib模块(推荐,无需额外依赖)

k6自带k6/zlib模块,支持gzip和deflate格式的解压,直接用它处理WebSocket收到的二进制数据即可:

import { WebSocket } from 'k6/experimental/websockets';
import zlib from 'k6/zlib';

export default function () {
  const ws = new WebSocket('wss://你的WebSocket地址');

  ws.on('open', () => {
    console.log('WebSocket连接成功');
  });

  ws.on('message', (compressedData) => {
    // 根据实际压缩格式选择解压方法:
    // - gzip压缩用zlib.gunzip
    // - deflate(permessage-deflate)用zlib.inflate
    const decompressedBuffer = zlib.gunzip(compressedData);
    
    // 将二进制数据转换为UTF-8字符串
    const rawJsonStr = new TextDecoder('utf-8').decode(decompressedBuffer);
    
    // 解析为JSON对象
    const originalData = JSON.parse(rawJsonStr);
    console.log('原始JSON数据:', originalData);
  });

  ws.on('close', () => {
    console.log('WebSocket连接关闭');
  });
}

方案二:使用pako库(需打包适配)

如果必须用pako,需要将其打包为适配非浏览器环境的CommonJS模块:

  1. 安装pako:
npm install pako
  1. 用webpack/rollup等工具将pako打包为无浏览器依赖的CommonJS模块(确保打包时排除window相关的代码分支)。

  2. 在k6脚本中导入打包后的pako并使用:

import { WebSocket } from 'k6/experimental/websockets';
import pako from './打包后的pako路径.js';

export default function () {
  const ws = new WebSocket('wss://你的WebSocket地址');

  ws.on('message', (compressedData) => {
    // 将ArrayBuffer转换为Uint8Array(pako需要此类型)
    const uint8Data = new Uint8Array(compressedData);
    
    // 根据压缩格式选择方法:
    // - gzip用pako.ungzip
    // - deflate用pako.inflate
    const decompressedUint8 = pako.ungzip(uint8Data);
    
    const rawJsonStr = new TextDecoder('utf-8').decode(decompressedUint8);
    const originalData = JSON.parse(rawJsonStr);
    console.log('原始JSON数据:', originalData);
  });
}

注意事项

  • 确认WebSocket的压缩格式:多数场景下用的是permessage-deflate,对应zlib.inflate或pako.inflate;如果是gzip封装的压缩包,用gunzip/ungzip。
  • k6的WebSocket模块属于实验性特性,需要使用v0.38.0及以上版本的k6。
  • 若收到的消息是字符串类型(而非二进制),需要先将其转换为Uint8Array再解压。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:32:06