uniapp中使用WebSocket

在 uni-app 中,uni.connectSocket 方法用于建立 WebSocket 连接,但它并不提供 onOpenonMessageonCloseonError 这样的方法作为回调函数。相反,你应该使用 uni.onSocketOpenuni.onSocketMessageuni.onSocketCloseuni.onSocketError 这些全局事件来监听 WebSocket 的不同事件。

javascript 复制代码
<template>  
  <view>  
    <button @click="connectWebSocket">连接WebSocket</button>  
    <button @click="sendWebSocketMessage">发送消息</button>  
    <button @click="closeWebSocket">关闭WebSocket</button>  
  </view>  
</template>  
  
<script>  
export default {  
  data() {  
    return {  
      socket: null, // WebSocket实例  
      isConnected: false, // WebSocket连接状态  
    };  
  },  
  methods: {  
    // 连接WebSocket服务器  
    connectWebSocket() {  
      if (!this.isConnected) {  
        this.socket = uni.connectSocket({  
          url: 'ws://your-websocket-server-url' // 替换为你的WebSocket服务器URL  
        });  
  
        uni.onSocketOpen(res => {  
          console.log('WebSocket连接已打开!');  
          this.isConnected = true;  
        });  
  
        uni.onSocketMessage(res => {  
          console.log('收到WebSocket服务器消息:', res.data);  
        });  
  
        uni.onSocketClose(res => {  
          console.log('WebSocket连接已关闭!');  
          this.isConnected = false;  
        });  
  
        uni.onSocketError(err => {  
          console.error('WebSocket连接打开失败,请检查:', err);  
        });  
      }  
    },  
  
    // 发送WebSocket消息  
    sendWebSocketMessage() {  
      if (this.socket && this.isConnected) {  
        uni.sendSocketMessage({  
          data: '这是一条测试消息' // 发送的消息内容  
        });  
      } else {  
        console.error('WebSocket未连接或未打开,请先连接WebSocket!');  
      }  
    },  
  
    // 关闭WebSocket连接  
    closeWebSocket() {  
      if (this.socket) {  
        uni.closeSocket();  
        this.socket = null;  
        this.isConnected = false;  
      }  
    }  
  },  
  beforeDestroy() {  
    // 在组件销毁前,确保关闭 WebSocket 连接  
    this.closeWebSocket();  
  }  
};  
</script>

我使用了 uni.onSocketOpenuni.onSocketMessageuni.onSocketCloseuni.onSocketError 来监听 WebSocket 的事件。同时,在 sendWebSocketMessage 方法中,我添加了对 socket 实例和连接状态的检查,以确保在发送消息之前连接是打开的。最后,在 beforeDestroy 生命周期钩子中,我调用了 closeWebSocket 方法来确保在组件销毁时关闭 WebSocket 连接。

相关推荐
全麦面包 time展天10 小时前
瀚海拾贝(一)HTTP协议/IIS 原理及ASP.NET运行机制浅析【图解】
网络协议·http·asp.net
微硬创新10 小时前
耐达讯自动化16路0-20mA转PROFINET协议转换模块技术说明
人工智能·网络协议·自动化·信息与通信
2501_9159184114 小时前
iOS 怎么抓包?抓包鹰系统级 网卡 应用层三种方式对比,不越狱抓 iPhone 流量
网络协议·计算机网络·网络安全·ios·adb·https·udp
2501_9160088915 小时前
移动安全之 APP 加固,保障移动应用安全的重要手段
安全·macos·ios·小程序·uni-app·iphone·xcode
March.s15 小时前
IP 存储核心 iSCSI:原理拆解 + 无报错实战指南
网络·网络协议·tcp/ip
2501_9159214319 小时前
抓包鹰抓取系统 App 的流量,从底层读明文
网络协议·计算机网络·网络安全·adb·https·udp
若汝棋茗19 小时前
UDP 调试难复现?先把目标端点、广播和消息记录管起来
网络·网络协议·udp
小白说大模型20 小时前
从0开始学计算机网络:HTTP 协议的进化史
人工智能·网络协议·计算机网络·http
esabby21 小时前
253个原生IP + 40M独享回国带宽:香港站群服务器的硬核拆解
服务器·网络协议·tcp/ip
2501_9151063221 小时前
Python爬虫从零开始:七天掌握HTTP协议、数据解析与反爬策略
android·ios·小程序·https·uni-app·iphone·webview