收藏
回答

小程序websocket电脑工具正常,真机连接不上

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug websocket 客户端 7.0.4 2.7.0

使用wepy框架开发,springboot服务器,使用小程序websocket开发聊天程序,电脑开发工具端时候正常,无问题。真机调试时缺连接不上websocket,而且不报错,请各位大神帮看看是什么问题,十分感谢!代码如下:

<style lang="less">
</style>
<template>
<view>
  <view class='websocket-bottom'>
    <view class='wb-left'>
      <input placeholder='信息' value='{{msg}}' bindinput='megInput'></input>
    </view>
    <view class='wb-right' catchtap='sendEvent'>
      <text>发送</text>
    </view>
  </view>
  <view class='websocket-list'>
    <repeat for="{{list}}" key="index" index="index" item="item">
      <view class='wlf-left'>我是用户{{item.userId}}:</view>
      <view class='wlf-right'>{{item.message}}</view>
    </repeat>
  </view>
</view>
</template>
<script>
import wepy from 'wepy'
let socketOpen = false
export default class Chat extends wepy.page {
  config = {
    navigationBarTitleText: '国网四平供电公司'
  }
  components = {}
  data = {
    msg: '',
    list: []
  }
  computed = {}
  methods = {
    // 发送
    megInput(e) {
      let msg = e.detail.value
      this.msg = msg
    },
    sendEvent() {
      let that = this
      let msg = that.data.msg
      if (msg === '') {
        wx.showToast({
          title: '信息不能为空',
          icon: 'none',
          mask: true
        })
        return ''
      }
      if (socketOpen) {
        wx.sendSocketMessage({
          data: msg,
          success(res) {
            that.msg = ''
          }
        })
      } else {
        wx.showToast({
          title: '链接已断,重新链接',
          icon: 'none',
          mask: true
        })
      }
    }
  }

  linkSocket() {
    let that = this
    wx.connectSocket({
      url: 'wss://2p3z662313.51mypc.cn/client/wx',
      success() {
        socketOpen = true
        that.initEventHandle()
        console.log('-------------------connectSocket成功')
      },
      fail() {
        console.log('-------------------失败')
      }
    })
  };

  // 链接成功之后处理
  initEventHandle() {
    let that = this
    wx.onSocketMessage((res) => {
      // 数据处理
      that.setMessage(res.data)
    })
    wx.onSocketOpen(() => {
      console.log('WebSocket连接打开')
    })
    wx.onSocketError((res) => {
      console.log('WebSocket连接打开失败')
      this.reconnect()
    })
    wx.onSocketClose((res) => {
      console.log('WebSocket 已关闭!')
      socketOpen = false
      this.reconnect()
    })
  };
  setMessage(res) {
    let list = this.data.list
    list.push(JSON.parse(res))
    this.list = list
    // 刷新数据源
    this.$apply()
  };
  // 断线重连
  reconnect() {
    if (this.lockReconnect) return ''
    this.lockReconnect = true
    clearTimeout(this.timer)
    if (this.data.limit < 12) {
      this.timer = setTimeout(() => {
        this.linkSocket()
        this.lockReconnect = false
      }, 5000)
      this.limit = this.data.limit + 1
    }
  };
  events = {}
  onLoad() {
    this.linkSocket()
  }
}
</script>


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

2 个回答

登录 后发表内容