Day11:Disconnect Chat(关闭连线频道)

全文同步於个人 Docusaurus Blog

当使用者离开当前频道时,其他使用者的页面需要监听到离线的状况,并同时关闭那位离开者的频道。

在监听连线的同时,若触发断线的 socket,则将离开的使用者 ID,做为资料传给 handler.js。

// server.js
socket.on('disconnect', () => {
  // ...
  const data = {
    socketIdOfDisconnectPeer: socket.id,
  };
  io.emit('peer-disconnected', data);
});

中介层和 server-side,两边都透过 peer-disconnected 来沟通传输,另外,将离线的使用者 ID,传给 client-side

// handler.js
socket.on('peer-disconnected', (data) => {
  ui.removeChatOfDisconnected(data);
});

client-side 依据传过来的离线的使用者 ID,移除对应的 DOM,同时也针对 store 中保存的状态进行更新,确保目前聊天频道中的使用者是最新的状态。

// ui.js
const removeChatOfDisconnected = (data) => {
  const { socketIdOfDisconnectPeer } = data;
  const activeChatGroup = store.getActiveChatGroup(socketIdOfDisconnectPeer);
  const newActiveChatGroup = activeChatGroup.filter(
    (node) => node.socketId !== socketIdOfDisconnectPeer
  );
  store.setActiveChatGroup(newActiveChatGroup);

  const chatBox = document.getElementById(socketIdOfDisconnectPeer);

  if (chatBox) {
    chatBox.parentElement.removeChild(chatBox);
  }
};

export default {
  // ...
  removeChatOfDisconnected,
};

disconnect


<<:  Day 25: ELK持续监控与Dockerize

>>:  <Day12>浅谈什麽是股票、期货、选择权、指数?

IOS、Python自学心得30天 Day-5 TensorFlow 建立和训练模型

前言: 再来就是建立和训练模型 程序码: 方案一 model = tf.keras.Sequenti...

[ 卡卡 DAY 29 ] - React Native iOS 打包步骤及离线 jsbundle产生

因为实在有太多东西想分享了,但已经 29 天了 我们先来个 iOS 打包步骤 完成开发後再来就是要...

Day 9-假物件 (Fake) - 虚设常式 (Stub)-1 (核心技术-1)

虚设常式(Stub)简介 今天的文章进入了新的系列,那因为接下来的概念是非常抽象的,所以会介绍数个核...

[Day 21] Facial Recognition: 只需要OpenCV就可以达成即时人脸辨识

昨天的内容还可以吸收吗? 也许有人会问: 这些神经网路模型还有GPU、CUDA什麽的我都不懂,能不能...

Day 25 - Watch os 开发学习2(Button)

今天我们继续学习watch os的开发。 正文 上面所展示的是按下Button之後会将下面的Text...