微信小程序里使用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里。

image

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

 

posted @ 2025-12-15 00:46  我的五年  阅读(34)  评论(0)    收藏  举报