2014-01-24 22 views
1

我正在构建一个具有节点和套接字io的实时应用程序。仅将套接字事件发射到一个房间中的一组客户

我的问题是:

在我的客户端我有

socket.emit('adduser', username); 

在我的服务器端我有

socket.on('adduser', function(username) { 
io.sockets.in(socket.room).socket.emit('user-added', somedata); 
} 

现在再次来到客户身边,我有一个用户添加听众

socket.on('user-added', function(somedata) { 
// get shit done! 
} 

现在假设我有3个客户端连接,并且它们都共享相同的脚本。 根据我对套接字io的理解,当我说io.sockets.in(socket.room).socket.emit时,事件将发送给特定房间中的所有连接客户端。

例如说,我只希望客户端1和客户端3听这'user-added'事件

如何实现这一目标?

回答

0

如果你不想发射给同一个房间里的所有用户,那么你可以使用下面的命令来根据他的id发送给特定的客户端。

io.sockets.socket(socketid).emit('user-added', {data: yourData}); 
+0

是的,但套接字(socketid)只会发射到一个特定的套接字。假设房间里有3个客户,我想发送到客户1和客户3 – Ajey

+0

那么好像你不想发射到发射的客户,就像客户2是发射插座,客户1和3是另外两个连接到同一个房间的套接字,如果是这样,那么你可以使用'socket.broadcast.to(socket.room).emit('user-added',{data:yourData});' –

0

如果要发射到所有用户,只给发件人,您可以使用下面的代码:

socket.broadcast.to('room1').emit('new user'); 

如果你不是想发到所有用户,包括发件人,下面的代码会做:

io.sockets.in('room1').emit('new user'); 

注意,你不需要io.sockets.in()socket通话。

相关问题