2013-11-26 84 views
0

我正在学习NodeJS和Socket.IO,并且一直在关注点缀的各种教程,主要关注于制作基本的聊天室。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); 
}); 

我将如何向其他所有客户(而不是发件人)发送包含在其自身套接字“会话”(即socket.room)中的数据?

+0

所以你想要的广播应该是所有插座而不是自我插座?我的理解是否正确? – 1Mayur

+0

是的!因此,当用户A切换房间并激发“switchRoom”时,我想让用户B,C和D接收“socket.broadcast.emit('updaterooms',rooms,socket.room)”,其中“socket.room”是他们自己的房间数据。 –

回答

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); 
      } 
     }); 
    }); 
}); 
相关问题