[英]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.