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