当前位置: 首页 > news >正文

从零开始用react + tailwindcss + express + mongodb实现一个聊天程序(十二) socketio 消息处理

1.后端

在message.controller.js中  在sendMessage方法中 每当我们发送消息 

需要socketio把这个消息转发给 接收人 加入转发逻辑

// 把消息发给指定的用户的socket

        const receiverSocketId = getReceiverSocketId(receiverId);

        if(receiverSocketId) {

            io.to(receiverSocketId).emit("newMessage", newMessage);

        }

2.前端

 在useChatStore.js中 我们订阅newMessage这个事件 这样只有订阅了的才会收到消息

新增2个方法 订阅和 取消订阅

// 订阅其他用户传来的消息

    subscribeToMessages:() => {

        const {selectedUser} = get();

        if(!selectedUser) return;

        //获取userStore中的socket实例

        const socket = useAuthStore.getState().socket;

        socket.on('newMessage', (newMessage) => {

            // 判断如果消息不是来自当前聊天对象,则不处理

            if(newMessage.senderId !== selectedUser._id) return;

            set({messages: [...get().messages, newMessage]});

        })

    },

    // 取消订阅

    unsubscribeFromMessages:() => {

        const socket = useAuthStore.getState().socket;

        socket.off('newMessage');

    },

在ChatBox.jsx组件中订阅消息

const ChatBox = () => {
  const {messages, getMessages, isMessagesLoading, selectedUser, subscribeToMessages, unsubscribeFromMessages} = useChatStore()
  const {authUser} = useAuthStore()

  useEffect(()=>{
    getMessages(selectedUser._id)

    // 开始订阅消息
    subscribeToMessages()

    return () => unsubscribeFromMessages()
  },[selectedUser._id, getMessages,subscribeToMessages, unsubscribeFromMessages])

3.测试 

完成了实时通信功能!下篇我们优化下前端页面  

相关文章:

  • Git 如何配置多个远程仓库和免密登录?
  • ruoyi-vue使用线程池进行异步开发
  • pandas-基础(数据结构及文件访问)
  • 【2025年24期免费获取股票数据API接口】实例演示五种主流语言获取股票行情api接口之沪深A股最近10天资金流入趋势数据获取实例演示及接口API说明文档
  • 在Oracle中编写雪花算法升学雪花ID
  • 基于python大数据的汽车舆情可视化及分析系统
  • MySQL的日志
  • 【AUTOSAR 基础软件】存储栈(NvM、MemIf、Fee)详解
  • 蓝桥杯嵌入式组第七届省赛题目解析+STM32G431RBT6实现源码
  • git本地仓库链接远程仓库
  • 【Linux系统编程】初识系统编程
  • visual studio 2022 E0020: 未定义标识符 “string“
  • shell学习-第四天
  • Qt常用控件之 纵向列表QListWidget
  • 边界网关协议(BGP)技术详解:原理、应用与配置实践
  • Django与数据库
  • Redis数据结构——set
  • C语言(队列)
  • 算法.习题篇
  • 论文阅读_大型语言模型个性化劝说的黑暗模式
  • 进一步推进网站集约化建设/常用seo站长工具
  • 做免费网站教程/福建seo排名培训
  • 饿了么网站开发/竞价推广营销
  • 武汉做商城网站建设/微博热搜榜排名今日
  • 吉安市网站建设/免费个人网站源码
  • 网站建设与维护考题/策划公司是做什么的