在反应中切换聊天时如何订阅新的websocket会话

Posted

技术标签:

【中文标题】在反应中切换聊天时如何订阅新的websocket会话【英文标题】:How to subscribe to a new websocket session when switching chats in react 【发布时间】:2019-10-25 13:24:57 【问题描述】:

我正在开发一个实时聊天功能,用户可以加入许多不同的聊天室。切换房间后,我很难订阅新的聊天室。它正在将消息发送到正确的会话,但由于没有重新订阅新会话,因此没有接收到消息。

  useEffect(() => 
      client.configure(
        brokerURL: 'ws://localhost:8080/ws',
        connectHeaders: sh,
        onConnect: () => 
          console.log('onConnect');
          setIsConnected(true);
          client.subscribe(`/secure/room/$convoId`, mes => 
            const json = JSON.parse(mes.body);
            setMessages(prev => prev.concat(json));
          );
        ,
        onDisconnect: () => 
          console.log('disconnected');
          setIsConnected(false);
        ,
        onWebSocketClose: () => 
          client.unsubscribe();
        
      );
      client.activate();
  , [messages, convoId]);

一旦用户切换到新的聊天室,重新订阅会话

【问题讨论】:

【参考方案1】:

尝试在重新配置之前先关闭连接。 喜欢client.disconnect();

【讨论】:

谢谢!那行得通,我设置了一个监听器来检查位置何时发生变化并强制断开连接。

以上是关于在反应中切换聊天时如何订阅新的websocket会话的主要内容,如果未能解决你的问题,请参考以下文章

websocket聊天时,图片压缩处理(url或者input-file)

Webflux,使用Websocket如何防止订阅两次反应式redis消息操作

使用 websocket 反应通量更新循环

为啥在使用 XMPP 时多次发送聊天时会出现“服务不可用”?

Poloniex 新的 Websocket API

用户在屏幕聊天时如何取消本地推送通知?