Socket.io,发送给单个客户端

时间:2017-10-24 12:21:55

标签: javascript sockets socket.io

我有一个聊天应用程序,允许多个人连接到聊天室,当一个新的客户端连接到聊天室,我希望能够向他们显示聊天记录,我已经完成了我的发布聊天记录但显然这会更新聊天中的所有人,从而导致重复的消息。

我如何挑出新用户并仅向他们显示聊天内容?

这是服务器代码

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示例,数据正在发送回此方法,添加聊天消息会更新所有人。

2 个答案:

答案 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);