[英]Socket.io - send different data to sender and clients?
我正在學習NodeJS和Socket.IO,並一直遵循着各式各樣的教程,主要側重於建立基本的聊天室。
我的應用程序到目前為止工作正常:能夠與客戶一起發送消息,並能夠移至其他“房間”。
現在,我試圖對其進行整理,使它看起來很重要。
我絆倒了以下想法:
當用戶A從房間A移到房間B時,將發送generate()方法來更新具有用戶計數的數組,然后將其發送回發送方。 然后更新側面板中的房間列表,例如,房間A(0),房間B(1)。
現在,向發送者發送新數據變得容易並且可行,房間列表得到更新,其他房間(發送者不在其中)具有超鏈接(這是用戶在房間之間移動的方式)
但是我想將數據發送給其他客戶端,因此他們的房間列表也會更新。 發送與以前相同的數據意味着其他客戶端的房間列表不正確,因為該數據引用了發送者加入的新房間名稱,而不是其他客戶端當前所在的房間。
一些代碼:
socket.on('switchRoom', function(data) {
var newroom = sanitize(data).escape().trim();
socket.leave(socket.room);
socket.join(newroom);
socket.room = newroom;
socket.emit('updaterooms', rooms, newroom);
// this is the problem area, socket.room should be the socket.room data for the non-sending client
//socket.broadcast.emit('updaterooms', rooms, socket.room);
});
我如何將所有包含在它們自己的套接字“會話”(即socket.room)中的數據發送給所有其他客戶端(不是發送者)?
您將需要發出一個針對每個套接字的生成的消息。 您需要做的是遍歷每個套接字,根據每個套接字發出自定義消息,例如:
io.sockets.on('connect', function(socket) {
socket.on('switchRoom', function(data) {
var newroom = sanitize(data).escape().trim();
socket.leave(socket.room);
socket.join(newroom);
socket.room = newroom;
socket.emit('updaterooms', rooms, newroom);
io.sockets.clients.forEach(function(client) {
if (socket != client) {
client.emit('updaterooms', rooms, client.room);
}
});
});
});
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.