2024-07-16 创建于墨问
协议参考 Web SSE
详细文档不好找,在 21 年的一个公告里:
补充:
-
服务端传输前中文需要编码为 base64,否则可能接收异常 详情
-
全部数据接收完成后,会触发 requset success
-
可以执行 requestTask.abort() 主动断开,会触发 requset fail
-
timeout 超时时间没有生效,实际超时了会一直等待,需要小程序去主动断开链接
-
能够自动重连,但超过 5 秒后,大概率会一直等待,需要小程序去主动断开链接
接收到的数据,转换流程为:
-
ArrayBuffer 转换为 String
-
使用 \n 拆分 String
-
将 String 中的 base64 字符串,转换为普通字符串
-
使用 JSON.parse 把普通字符串,转换为 Object
对比了下 stackoverflow 里几种方式,最终使用 JS 来实现 arrayBufferToString:
base64 转 String:
const arrayBuffer =
wx.base64ToArrayBuffer(base64)
const jsonText =
arrayBufferToString(arrayBuffer)
最后遇到了 3 个 bug,需要自行 hack 解决下:
#271 [mac] wx.request 分块传输完成后,statusCode 返回 NaN,预期是 200
#272 [ios] wx.request 分块传输过程中,如果网络中断,没有执行任何回调事件,预期是执行 fail
#304 requestTask.onChunkReceived 分块传输,有概率一次事件收到 2 个包