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
更多关于HarmonyOS 鸿蒙Next Websocket只有在connect成功的回调发消息,服务器才能收到,另外调用的发送都收不到(官方工程和文档代码,都是这个现象)的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,WebSocket的发送消息功能可能在connect
成功的回调之外无法正常发送消息。这是因为WebSocket的连接可能还未完全建立或状态未正确更新。确保在connect
回调中发送消息时,连接已完全建立,状态为OPEN
。在其他地方发送消息时,需检查WebSocket的状态是否为OPEN
,否则消息可能无法发送。可以通过监听WebSocket的状态变化,确保在正确状态下发送消息。