簡體   English   中英

Socket.io,發送到單個客戶端

[英]Socket.io, emit to a single client

我有一個聊天應用程序,允許多人連接到聊天室,當新客戶端連接到聊天室時,我希望能夠向他們展示聊天記錄,我已經完成了他的聊天記錄,但顯然這會更新每個人在導致重復消息的聊天中。

我如何挑出新用戶並向他們顯示聊天內容?

這是服務器代碼

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 示例,數據正在發送回此方法,並且添加聊天消息會更新每個人。

為了與個人交流,您需要獲取他們的 ID。 您可以通過訪問socket對象來完成此操作,假設這是您在連接操作上創建的名稱,如以下服務器端代碼塊所示:


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)
  })
})

在您的示例中,為了可讀性,我已將承諾交換為 async/await,但您可以使用您喜歡的模式完成相同的操作。 只要相信在這種情況下,您尋求捕獲的 ID 將始終保留在您在連接時生成的socket對象中的上下文中。

您可以使用以下代碼行向特定用戶/客戶端發送事件/消息:

socket.broadcast.to(socketid).emit('chatHistory', data);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM