uni-app中无法动态创建多个websocket

发布于 1周前 作者 bupafengyu 来自 Uni-App

uni-app中无法动态创建多个websocket

期望想通过动态创建websocket并传参数,已实现针对性向某群组发消息。现在由于无法动态创建连接,使得后端服务广播所有的客户端连接。

4 回复

这种不是应该websocket发送参数携带群组id,后端再只发消息给组内的成员吗

webocket发送的时候有ID,你可以通过ID或ID组来给特定的群体发送

在uni-app中,虽然通常我们使用单一的WebSocket实例进行通信,但在某些场景下确实可能需要动态创建多个WebSocket连接。这可以通过管理一个WebSocket实例池来实现。以下是一个简单的代码示例,展示了如何在uni-app中动态创建和管理多个WebSocket连接。

首先,我们需要一个管理WebSocket实例的类或者对象。这里我们使用一个类来管理多个WebSocket连接:

class WebSocketManager {
  constructor() {
    this.sockets = new Map(); // 使用Map存储WebSocket实例,key为连接标识
  }

  // 创建WebSocket连接
  createSocket(url, id) {
    const ws = new WebSocket(url);

    ws.onopen = () => {
      console.log(`WebSocket ${id} connected`);
    };

    ws.onmessage = (event) => {
      console.log(`WebSocket ${id} received:`, event.data);
    };

    ws.onclose = () => {
      console.log(`WebSocket ${id} disconnected`);
      this.sockets.delete(id); // 连接关闭时从Map中移除
    };

    ws.onerror = (error) => {
      console.error(`WebSocket ${id} error:`, error);
    };

    this.sockets.set(id, ws); // 将新创建的WebSocket实例存储到Map中
    return ws;
  }

  // 根据id获取WebSocket实例
  getSocket(id) {
    return this.sockets.get(id);
  }

  // 关闭所有WebSocket连接
  closeAllSockets() {
    for (const ws of this.sockets.values()) {
      ws.close();
    }
    this.sockets.clear();
  }
}

// 使用示例
const wsManager = new WebSocketManager();

// 动态创建WebSocket连接
const ws1 = wsManager.createSocket('wss://example.com/socket1', 'socket1');
const ws2 = wsManager.createSocket('wss://example.com/socket2', 'socket2');

// 发送消息到指定WebSocket连接
ws1.send('Hello, Socket 1!');
ws2.send('Hello, Socket 2!');

// 关闭所有WebSocket连接
// wsManager.closeAllSockets();

上述代码定义了一个WebSocketManager类,用于管理多个WebSocket连接。你可以根据需要动态创建WebSocket连接,并通过指定的ID来管理这些连接。当连接关闭或发生错误时,相应的WebSocket实例会从Map中移除。

注意,在实际应用中,你可能需要更复杂的逻辑来处理连接的重连、心跳检测等功能。此外,确保在组件销毁或页面卸载时正确关闭所有WebSocket连接,以避免资源泄露。

回到顶部