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

简介: 支付宝小程序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)
    }
  });
相关实践学习
快速体验阿里云云消息队列RocketMQ版
本实验将带您快速体验使用云消息队列RocketMQ版Serverless系列实例进行获取接入点、创建Topic、创建订阅组、收发消息、查看消息轨迹和仪表盘。
消息队列 MNS 入门课程
1、消息队列MNS简介 本节课介绍消息队列的MNS的基础概念 2、消息队列MNS特性 本节课介绍消息队列的MNS的主要特性 3、MNS的最佳实践及场景应用 本节课介绍消息队列的MNS的最佳实践及场景应用案例 4、手把手系列:消息队列MNS实操讲 本节课介绍消息队列的MNS的实际操作演示 5、动手实验:基于MNS,0基础轻松构建 Web Client 本节课带您一起基于MNS,0基础轻松构建 Web Client
目录
相关文章
|
Shell 数据库
【YashanDB知识库】YAS-00402 failed to connect socket, errno 111, error message "Connection refused"
【YashanDB知识库】YAS-00402 failed to connect socket, errno 111, error message "Connection refused"
【YashanDB知识库】YAS-00402 failed to connect socket, errno 111, error message "Connection refused"
|
iOS开发 开发者
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
1031 67
uniapp开发ios打包Error code = -5000 Error message: Error: certificate file(p12) import failed!报错问题如何解决
|
小程序 安全 前端开发
支付宝小程序究竟藏着怎样的秘密?竟能成为连接亿万用户的桥梁!
【8月更文挑战第27天】随着移动互联网的发展,小程序已成为连接用户和服务的关键桥梁。支付宝小程序凭借其庞大的用户群和丰富的生态场景,为开发者提供了巨大的发展空间。本文提供了一份支付宝小程序开发者指南,帮助开发者从开发准备、开发流程、最佳实践到示例代码全面掌握支付宝小程序开发技能,从而连接亿万用户。开发者需先注册支付宝开发者账号,安装小程序开发者工具,并了解小程序架构;然后按步骤创建项目、编写代码、调试预览直至发布。此外,还需注重优化用户体验,充分利用支付宝生态资源,关注安全合规问题,以实现小程序的成功。
386 0
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
326 0
|
网络协议 数据格式 Python
python Socket无限发送接收数据方式
Socket是指套接字,是对网络中不同主机上的应用进程之间进行双向通信的端点的一种抽象。 一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。
|
开发工具 iOS开发 容器
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
iOS Objective-C 应用连接Azure Storage时,若不关闭账号的匿名访问,程序能正常运行。但关闭匿名访问后,上传到容器时会出现错误:“Public access is not permitted”。解决方法是将创建容器时的公共访问类型从`AZSContainerPublicAccessTypeContainer`改为`AZSContainerPublicAccessTypeOff`,以确保通过授权请求访问。
334 0
【Azure Blob】关闭Blob 匿名访问,iOS Objective-C SDK连接Storage Account报错
|
Java Android开发
Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。
【6月更文挑战第23天】 Java Socket编程示例:服务器开启在8080端口监听,接收客户端连接并打印消息。客户端连接服务器,发送"Hello, Server!"后关闭。注意Android中需避免主线程进行网络操作。
480 4
|
小程序 前端开发 Java
(JAVA)支付宝小程序登录相关(authToken获取用户唯一userId、encryptedData解密手机号)
(JAVA)支付宝小程序登录相关(authToken获取用户唯一userId、encryptedData解密手机号)
1374 0
|
设计模式 监控 网络协议
socket通信处于网络协议那一层和两种接收发送消息方式
socket通信处于网络协议那一层和两种接收发送消息方式
768 2
|
存储 Python
Python网络编程基础(Socket编程) UDP 发送和接收数据
【4月更文挑战第10天】对于UDP客户端而言,发送数据是一个相对简单的过程。首先,你需要构建一个要发送的数据报,这通常是一个字节串(bytes)。然后,你可以调用socket对象的`sendto`方法,将数据报发送到指定的服务器地址和端口。