enter image description here我正在构建一个slack类型的应用程序,其中有多个聊天室。但如果点击一个房间并发送消息,它工作正常,但之后,如果转到另一个频道并发送消息,我的消息得到发送2次,并在切换3次后再次发送,以此类推(如图所示)
- 这是密码**
选择通道客户端
const selectRoomHandler = (user) => {
socket.emit("join__room", {
room: user.userName,
});
};
服务器
socket.on("join__room", ({ room }) => {
socket.leave(currRoom);
socket.join(room);
currRoom = room;
});
向通道客户端发送消息
socket.emit("room__message", {
text: message,
sender: userName,
senderId: socket.id,
room: selectUser.userName,
});
服务器
socket.on("room__message", ({ text, sender, senderId, room }) => {
io.in(room).emit("room__message__incoming", {
text,
sender,
senderId,
room,
date: new Date(),
});
});
在客户端接收消息
useEffect(() => {
socket.on("room__message__incoming", (data) => {
if (data.senderId !== socket.id)
setRoomMessage((prev) => [...prev, data]);
});
}, [socket]);
消息应仅出现一次,不得重复
1条答案
按热度按时间hwamh0ep1#
使用www.example.com提供的房间socket.io可能会很棘手。就我个人而言,当我使用房间进行更多操作时,我喜欢自己管理房间状态。
然后,您只需更改该对象的roomName以切换房间并发送到该房间。
像这样,你可以添加和删除客户的房间,你希望。我希望你觉得这个答案有帮助。