学习使用socket开发的聊天功能,服务端是tp5+gateway,SocketTask连接成功,gateway会发送一条带有client_id的信息过来,绑定会员user_id。 gateway根据绑定的user_id,点对点发送信息。
可是感觉很不稳定,socket连接成功后不会执行socketTask.open,SocketTask.onMessage也接收不到信息,有时候又可以。感觉socketTask.open执行一次后,页面刷新或关闭小程序再打开后就不执行了,导致绑定不了user_id。
部分代码如下 ,请大老们帮忙看下什么原因。
var SocketTask=null;
var url = 'ws://localhost:8282';
var socketOpen = false;
page({
data:{
from_id:10,
to_id:11,
},
onShow: function () {
if (!socketOpen) {
this.webSocket()
}
},
webSocket: function () {
let that = this;
// 创建Socket
SocketTask = wx.connectSocket({
url: url,
data: 'data',
header: {'content-type': 'application/json'},
method: 'post',
success: function (res) {
console.log('WebSocket连接创建', res);
},
fail: function (err) {
wx.showToast({
title: 'WebSocket 网络异常!',
})
console.log(err)
},
})
},
onReady: function () {
var _this = this,
from_id = _this.data.from_id;
SocketTask.onOpen(res => {
socketOpen = true;
console.log('监听 WebSocket 连接打开事件。', res)
})
SocketTask.onClose(onClose => {
console.log('监听 WebSocket 连接关闭事件。', onClose)
socketOpen = false;
this.webSocket()
})
SocketTask.onError(onError => {
console.log('监听 WebSocket 错误。错误信息', onError);
socketOpen = false
})
SocketTask.onMessage(onMessage => {
let onMessage_data = JSON.parse(onMessage.data);
console.log('监听WebSocket接受到服务器的消息事件。服务器返回的消息', onMessage_data)
switch (onMessage_data.type) {
case 'init': // 初始化绑定会员user_id
console.log('绑定id=' + from_id)
var bild = {
type: "bind",
from_id: from_id
};
_this.sendSocketMessage(bild);
break;
case 'say':
_this.getDatas(onMessage_data);
break;
}
})
},
})
您好 楼主问一下 您这个解决了吗 我现在也遇到了 跟你一样的问题