HarmonyOS 鸿蒙Next Websocket只有在connect成功的回调发消息,服务器才能收到,另外调用的发送都收不到(官方工程和文档代码,都是这个现象)

HarmonyOS 鸿蒙Next Websocket只有在connect成功的回调发消息,服务器才能收到,另外调用的发送都收不到(官方工程和文档代码,都是这个现象)

Websocket只有在connect成功的回调发消息,服务器才能收到,另外调用的发送都收不到。(官方工程和文档代码,都是这个现象)

服务器已经和安卓版本的APP持续调了一年了,比较稳定,所以我们聚焦在鸿蒙APP上来解决问题。

DevEco Studio 3.1.1 Release

API9.0

下面是基于官方的工程上做了调整,由于业务关系,调整了链接和发送数据。

1、connect成功的回调里面发第一次消息是通的,有来有回,第二次就不行了。

2、另外用按钮触发的发送消息吗,都没通,服务器那边表示没收到。(但是看日志,是send success的)

onConnect() {
  let promise = socket.connect(this.ipAddress,{
    header:{
      "userId":"xxxxx",
      "Authorization":"xxxx"
    }})
  Logger.info(TAG, `ipAddress:${JSON.stringify(this.ipAddress)}`)
  promise.then(() => {
    Logger.info(TAG, `connect success`)
    let userResp: Heartbeat = {
      MessageID:"0-0-20231111 111111 111-111-ccc",
      UserID:"xxxxxx",
      ShakeHand:23205
    }
    let sendData = JSON.stringify(userResp)
    // 发送成功的,但是只有一次
    let sendResult = socket.send(sendData)
    sendResult.then(() => {
      Logger.info(TAG, `[send]send success:`+sendData)
    }).catch((err: Error) => {
      Logger.info(TAG, `[send]send fail, err:${JSON.stringify(err)}`)
    })
  }).catch((err: Error) => {
    Logger.info(TAG, `connect fail, error:${JSON.stringify(err)}`)
  })
  socket.on('open', () => {
    // 当收到on('open')事件时,可以通过send()方法与服务器进行通信
    promptAction.showToast({ message: '连接成功,可以聊天了!', duration: 1500 })
  })
  socket.on('message', (err: Error, value: Object) => {
    Logger.info(TAG, `on message, value = ${value}`)
    let receiveMessage = new ChatData(JSON.stringify(value), true)
    this.chats.pushData(receiveMessage)
  })
}

disConnect() {
  socket.off('open', (err, value) => {
    let val: Record<string, Object> = value as Record<string, Object>;
    Logger.info(TAG, `on open, status:${val['status']}, message:${val['message']}`);
  })
  socket.off('message')
  promptAction.showToast({ message: '连接已断开!', duration: 1500 })
  socket.close()
}

sendMessage() {
  let sendMessage = new ChatData(this.message, false)
  this.chats.pushData(sendMessage)

  let userResp: Heartbeat = {
    MessageID:"0-0-20231111 111111 111-111-aaa",
    UserID:"xxxxx",
    ShakeHand:23205
  }
  let sendData = JSON.stringify(userResp)
  // 服务器一直没收到消息
  let sendResult = socket.send(sendData)
  sendResult.then(() => {
    Logger.info(TAG, `[send]send success:`+sendData)
  }).catch((err: Error) => {
    Logger.info(TAG, `[send]send fail, err:${JSON.stringify(err)}`)
  })
  this.message = ''
}

更多关于HarmonyOS 鸿蒙Next Websocket只有在connect成功的回调发消息,服务器才能收到,另外调用的发送都收不到(官方工程和文档代码,都是这个现象)的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS 鸿蒙Next Websocket只有在connect成功的回调发消息,服务器才能收到,另外调用的发送都收不到(官方工程和文档代码,都是这个现象)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,WebSocket的发送消息功能可能在connect成功的回调之外无法正常发送消息。这是因为WebSocket的连接可能还未完全建立或状态未正确更新。确保在connect回调中发送消息时,连接已完全建立,状态为OPEN。在其他地方发送消息时,需检查WebSocket的状态是否为OPEN,否则消息可能无法发送。可以通过监听WebSocket的状态变化,确保在正确状态下发送消息。

回到顶部