收藏
回答

SocketTask连接成功,SocketTask.open监听不会执行,不明白问题出在哪?

学习使用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,
  },
onShowfunction () {
      if (!socketOpen) {
        this.webSocket()
      }
    },
  webSocketfunction () {
      let that = this;
      // 创建Socket
      SocketTask = wx.connectSocket({
        url: url,
        data'data',
        header: {'content-type''application/json'},
        method'post',
      successfunction (res{
        console.log('WebSocket连接创建', res);
      },
      failfunction (err{
        wx.showToast({
          title'WebSocket 网络异常!',
        })
        console.log(err)
      },
    })
  },
onReadyfunction () {
    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;
      }
    })
  },
})

回答关注问题邀请回答
收藏

1 个回答

  • 2022-08-05

    您好 楼主问一下 您这个解决了吗 我现在也遇到了 跟你一样的问题

    2022-08-05
    有用
    回复
登录 后发表内容