微信小程序里使用sse收到的数据不完整的问题
最近对接一个AI的小程序,后端使用sse给前端推送数据。简单记录下:
uni-app里的see大概是这样:
const response = uni.request({
...config,
url:globeurl+config.url,
enableChunked: true, // 开启流传输
responseType: "arraybuffer",
success: (res) => {
resolve(res)
},
fail: (err) => {
reject(err)
}
})
resp.onChunkReceived((e) => {
// 进行处理二进制编码
const decoder = new TextEncoding.TextDecoder('utf-8'); // 创建一个utf-8解码器,用于解码二进制数据为文本。
let text = decoder.decode(new Uint8Array(e.data)); // 解码二进制数据为文本。
// 通常可能需要通过换行符分割出每条data,问就是sse就是这么设计的,如果是json接下来可以JSON.parse(text)了...
}
TextEncoding类是“text-encoding-shim”这个包。
突然被测出字符丢失问题,经过排查发现是因为微信小程序底层会自动在16360字节处截断,后续数据会在下次onChunkReceived里。

找到原因就好办了,catch到JSON.parse错误就缓存字符,拼接到下次的onChunkReceived数据前面就好了。


浙公网安备 33010602011771号