我有一个聊天应用程序,允许多个人连接到聊天室,当一个新的客户端连接到聊天室,我希望能够向他们显示聊天记录,我已经完成了我的发布聊天记录但显然这会更新聊天中的所有人,从而导致重复的消息。
我如何挑出新用户并仅向他们显示聊天内容?
这是服务器代码
socket.on('chat history', function(){
console.log("Chat History");
posts.find({chatId: chatId}).then(function(chatHistory){
console.log("Chat history", chatHistory);
socket.emit('chat history', chatHistory);
})
});
这是客户端代码
socket.on('chat history', function(chatHistory){
for (var key in chatHistory) {
var obj = chatHistory[key];
addChatMessage(obj);
}
});
我正在使用socketio示例,数据正在发送回此方法,添加聊天消息会更新所有人。
答案 0 :(得分:0)
为了与个人交流,您需要获取他们的ID。您可以通过访问socket
对象来做到这一点,假设这是您在connect操作上创建的名称,如以下服务器端代码块所示:
io.on('connection', socket => {
socket.on('chat history', async function(){
console.log("Chat History");
const chatHistory = await posts.find({chatId: chatId})
console.log("Chat history", chatHistory)
socket.to(socket.id).emit('chat history', chatHistory)
})
})
在您的示例中,出于可读性考虑,我已将诺言换为异步/等待,但是您可以使用自己喜欢的模式来完成同样的任务。在这种情况下,只要相信您要捕获的ID将始终保持在您在连接时生成的socket
对象内的上下文中即可。
答案 1 :(得分:-1)
您可以使用以下代码行向特定用户/客户端发送事件/消息:
socket.broadcast.to(socketid).emit('chatHistory', data);