从零开始用react + tailwindcss + express + mongodb实现一个谈天程序(十二 ...

打印 上一主题 下一主题

主题 1015|帖子 1015|积分 3045

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

x
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组件中订阅消息
  1. const ChatBox = () => {
  2.   const {messages, getMessages, isMessagesLoading, selectedUser, subscribeToMessages, unsubscribeFromMessages} = useChatStore()
  3.   const {authUser} = useAuthStore()
  4.   useEffect(()=>{
  5.     getMessages(selectedUser._id)
  6.     // 开始订阅消息
  7.     subscribeToMessages()
  8.     return () => unsubscribeFromMessages()
  9.   },[selectedUser._id, getMessages,subscribeToMessages, unsubscribeFromMessages])
复制代码

3.测试 


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

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

锦通

论坛元老
这个人很懒什么都没写!
快速回复 返回顶部 返回列表