我正在学习NodeJS和Socket.IO,并且一直在关注各种教程,主要关注的是创建一个基本的聊天室。
我的应用程序到目前为止工作:能够发送邮件,客户可以移动到不同的“房间”。
现在我正在尝试整理它并让它看起来像那样。
我对以下想法感到磕磕绊:
当用户A从房间A移动到B时,会发送emit()方法来更新具有用户数的数组,然后将其发送回发件人。然后更新侧面板中的房间列表,例如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);
});
如何使用自己的套接字“session”(即socket.room)中包含的数据向所有其他客户端(不是发送者)发送?
答案 0 :(得分:0)
您需要发出一个生成的消息,该消息可以满足每个套接字的需要。您需要做的是遍历每个套接字,根据每个套接字发出自定义消息,例如:
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);
}
});
});
});