Node.js 如何在React客户端中侦听socketIO私有消息?
我在一个Express应用程序中有一个SocketIO实例,用于侦听React客户端请求。用户可以向特定的人发送私人消息。服务器接收私有消息,并应通过io.to(socketId).emit(content)方法将其发回发送方和接收方 如何在React中侦听此事件并更新消息数组?为了简化这个过程,我创建了一个connectedUsers对象,它的键是mongoDB的user.\u id,其值是由socketIO生成的唯一socketID。这样,我可以轻松地将消息发送给客户机中的特定人员。一旦发送,消息将存储在MongoDB数据库中 这是后端。关注点是io.on(“privateMessage”)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。这样,我可以轻松地将消息发送给客户机中的特定人员。一旦发送
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函数?