Alipay 애플릿 IOS 연결 mqtt가 AMQJS0007E 소켓 오류를 수신합니다.

1. 현상

Alipay 애플릿이 xmqtt.js를 통합한 후 Android는 서버에 정상적으로 연결되어 메시지를 주고받을 수 있으며, IOS는 서버에 정상적으로 연결되지만 약간 더 긴 문자열을 받을 수 없습니다.

Alipay 애플릿의 실제 시스템 디버깅 오류AMQJS0007E Socket error:未能完成操作。(OSStatus错误-9807。)

2. 원인 분석

이는 Android와 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)
    }
  });

추천

출처blog.csdn.net/qq_35921773/article/details/132718389