问题说明:
uni.sendSocketMessage 发送消息频繁(非常频繁)报错,进入uni.onSocketError;
调试说明:
uni.connectSocket 成功创建websoket链接,uni.sendSocketMessage 成功发送握手消息,能够正常接收消息;
浏览器模拟没问题,打包成Android app出现此问题;目前是在华为p10手机,其他手机未验证。
求助说明:
本人业余兼职前端开发,首次使用uni-app,希望有经验的同学帮忙分析可能的原因,和优化方案。
另外,网上说uniapp不支持soket.io?本人验证过js websocket,浏览器可用,打包app不行。
前端部分代码:
1、创建连接
createWebSocket = () => {
let _this = this
uni.connectSocket({
url:WEBSOCKET_URL,
success: function() {
// _this.config.onMessage("WebSocket连接成功"+WEBSOCKET_URL)
_this.initEventHandle()
},
})
}
2、发起握手
uni.onSocketOpen(function(event) {
_this.socketOpen = true
let message = new proto.Model()
let browser = _this.config.Browser
message.setVersion("1.0")
message.setDeviceid("")
message.setCmd(1)
message.setSender(_this.config.sender)
message.setMsgtype(1)
message.setFlag(1)
message.setPlatform(browser.name)
message.setPlatformversion(browser.version)
message.setToken(_this.config.sender)
let bytes = message.serializeBinary()
_this.config.onMessage('socket 建立,发起握手')
uni.sendSocketMessage({
data:bytes.buffer,
fail:function(res){
_this.config.onMessage('socket 建立,发起握手,失败')
}
})
// _this.sendMsgQueue()
})
3、发送消息
sendMsg = (msg) => {
if (this.socketOpen) {
this.socketMsg = msg
let message = new proto.Model()
let content = new proto.MessageBody()
message.setMsgtype(4)
message.setCmd(5)
message.setGroupid("")//系统用户组
message.setToken(this.config.sender)
message.setSender(this.config.sender)
message.setReceiver(this.config.receiver)//好友ID
content.setContent(msg)
content.setType(0)
message.setContent(content.serializeBinary())
let _this = this
uni.sendSocketMessage({
data:message.serializeBinary().buffer,
fail:function(res){
_this.socketMsgQueue.push(msg)
}
})
this.config.onMessage('发送消息'+msg)
} else {
this.socketMsgQueue.push(msg);
// this.config.onMessage('存储消息队列'+msg)
}
}
2 个回复
3***@qq.com (作者) - 写代码的产品经理
补充测试:
发送中文频繁出现,发送英文和数字没问题
3***@qq.com (作者) - 写代码的产品经理
encodeuricomponent,中文进行编码,已解决