我正在开发一个聊天应用程序,但我在使用 socket.io 时遇到了一些问题。
东西工作得很好而且很快。但是一旦更多的人登录 - 每个人都会看到所有的消息并且渲染变得混乱。
我为每条消息发送一个唯一的 ID,我很想创建房间,人们可以在其中聊天(1 对 1)
这首先发生:
const socketMessage = {
type: type,
body: body,
author: author,
date: Date.now(),
id: chatId
};
const io = require('socket.io-client');
const socket = io(process.env.REACT_APP_WS_URL);
socket.emit('message-sent', socketMessage);
这将转到发生这种情况的服务器:
socket.on('message-sent', data => {
socket.broadcast.emit('new-chat-message', data);
});
然后 WHich 进入一个自定义钩子并添加到消息数组中。
export default function useGetChatMessages(_id) {
const [chatMessages, setChatMessages] = React.useState([]);
React.useEffect(() => {
const io = require('socket.io-client');
const socket = io(process.env.REACT_APP_WS_URL);
socket.emit('send-chat-id', _id);
socket.on('chat-messages', data => {
setChatMessages(data.messages);
});
socket.on('new-chat-message', message => {
setChatMessages(messages => [...messages, message]);
notification.play();
});
}, [_id]);
return chatMessages;
}
我知道我的服务器上的广播部分是错误的,但我尝试了很多事情:
将 chatId 与消息一起发送,然后socket.join(chatId)
分几个阶段进行。然后 socket.to(chatId).emit(...) 等等。但我做错了。
有人可以帮忙吗?
非常感谢提前!!:-)