支付宝小程序IOS连接mqtt接收AMQJS0007E Socket error

1. 现象

支付宝小程序集成xmqtt.js后,安卓可以正常连接服务器,接收发送消息,IOS连接服务器正常,但是无法接收稍长的字符串。

支付宝小程序的真机调试报错AMQJS0007E Socket error:未能完成操作。(OSStatus错误-9807。)

2. 原因分析

推测是因为安卓和IOS对于消息处理机制不同,IOS对于较长的消息,会加入换行符号,即**\r\n**,有的消息内容甚至会加入多个**\r\n**。当我单个处理这个\r\n时,有时仍然会出问题,所以需要批量替换掉这个**\r\n**

中间,我采取了更换解析方法,base64转uni8Array的方法,发现安卓的又不好使了,真悲催。最终解决方案如下

3. 解决措施

批量替换换行符

data = data.replace(/[\r\n]/g,"");

对应的my.onSocketMessage方法接收消息修改如下

  my.onSocketMessage((res) => {

    if (typeof res.data === 'string') {
      // let str = res.data.replace(/[\r\n]/g,"");
      // let array = base64.toByteArray(str)
      let buffer = Buffer.from(base64.toByteArray(res.data.replace(/[\r\n]/g,"")))
      proxy.push(buffer)
    } else {
      var reader = new FileReader()
        reader.addEventListener('load', function () {
        let data = reader.result
        if (data instanceof ArrayBuffer) data = Buffer.from(data)
        else data = Buffer.from(data, 'utf8')
        proxy.push(data)
      })
      reader.readAsArrayBuffer(res.data)
    }
  });
相关推荐
十贰_4 个月前
Uni app 开发支付宝小程序,保存到相册,获取小程序权限列表失败问题记录及解决方案。
小程序·uni-app·支付宝小程序
柚鸥ASO优化5 个月前
小程序评分/关键词/UV优化助力小程序登顶
微信小程序·小程序·uv·支付宝小程序·小程序推广·小程序搜索排名优化
柚鸥ASO优化5 个月前
小成本搏大流量:微信/支付宝小程序搜索排名优化
微信小程序·支付宝小程序·小程序推广·小程序搜索排名优化·小程序运营·移动营销
源码技术栈8 个月前
C#微信公众号HIS预约挂号系统源码
c#·源码·b/s·支付宝小程序·医院预约挂号系统·微信公众号·预约挂号系统
罗峰源码8 个月前
支付宝小程序源码系统:自由DIY+完整的安装部署教程
小程序·支付宝小程序·支付宝小程序源码·支付宝小程序源码系统