Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/41.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js 如何在React客户端中侦听socketIO私有消息?_Node.js_Reactjs_Express_Socket.io - Fatal编程技术网

Node.js 如何在React客户端中侦听socketIO私有消息?

Node.js 如何在React客户端中侦听socketIO私有消息?,node.js,reactjs,express,socket.io,Node.js,Reactjs,Express,Socket.io,我在一个Express应用程序中有一个SocketIO实例,用于侦听React客户端请求。用户可以向特定的人发送私人消息。服务器接收私有消息,并应通过io.to(socketId).emit(content)方法将其发回发送方和接收方 如何在React中侦听此事件并更新消息数组?为了简化这个过程,我创建了一个connectedUsers对象,它的键是mongoDB的user.\u id,其值是由socketIO生成的唯一socketID。这样,我可以轻松地将消息发送给客户机中的特定人员。一旦发送

我在一个Express应用程序中有一个SocketIO实例,用于侦听React客户端请求。用户可以向特定的人发送私人消息。服务器接收私有消息,并应通过io.to(socketId).emit(content)方法将其发回发送方和接收方

如何在React中侦听此事件并更新消息数组?为了简化这个过程,我创建了一个connectedUsers对象,它的键是mongoDB的user.\u id,其值是由socketIO生成的唯一socketID。这样,我可以轻松地将消息发送给客户机中的特定人员。一旦发送,消息将存储在MongoDB数据库中

这是后端。关注点是io.on(“privateMessage”)

const connectedUsers={};
const socketManager=(io)=>{
io.on(“IdentificationUser”(用户)=>{
如果(!([user.id]在connectedUsers中)){
connectedUsers[user.id]=io.id;
}
});
io.on(“privateMessage”(数据)=>{
io.to(connectedUsers[data.recipientId]).emit(data.message);
io.to(connectedUsers[data.senderId]).emit(data.message);
});
io.on(“断开连接”,()=>console.log(“用户断开连接!”);

};我认为您需要将socket.on(“privateMessage”)部分置于socket.on(“connect”)范围之外

React必须在开始时加载所有事件


后端端必须负责授权。

对于客户端,存在连接事件,而不是连接。
对事件privateMessage的订阅应在连接回调之外

这个代码应该可以工作。希望这有帮助

import io from 'socket.io-client'


async function getUser(socketId) {
      try {
        const res = await ax.get(`${serverUrl}/login`);
        const socket = io(serverUrl);
        socketId.current = socket;
        socket.on("connection", () => {
          socket.emit("identifyUser", { id: res.data._id });
        });
        socket.on("privateMessage", (data) =>
           console.log("private message received!", data)
        );
      } catch (err) {
        throw new Error(err);
      }
    }

它似乎没有发出“privateMessage”事件,只有侦听器。这是因为我在脚本后面有一个函数来处理这个问题。为了更清楚,我刚刚上传了侦听服务器的主函数。发送函数是const sendPrivateMessage=()=>socketId.current.emit(“privateMessage”,{senderId:blablabla,recipientId:blablabla,message:“some cool text”date:new date().toISOString(),});数据在后端得到了很好的接收。@DoneDeal0您好,我有一个与您非常相似的问题,请您看一下。提前感谢@DoneDeal0在哪里调用getUser函数?