在Socket.io中排除排除

有没有办法通过socket.io发送消息,同时排除一些套接字ID? 我知道房间的存在,但这对我来说是不可能的。

如果我所尝试的是不可能的,那我应该怎么做呢?

a)迭代我想发送消息的所有用户(实际上,除1之外的所有用户),并为每个套接字发出一个消息

要么

b)只要把信息发送给每个人,并在客户端做一些哈希来“忽略”这个信息。

编辑:我不能做广播,因为消息是从服务器端生成(所以没有客户端交互)。

房间 – 不是完成你所要做的事情的方法,因为它们只是用来限制一群人,而不是特定的。

你正在寻找的是简单的用户收集和设置某种filter的能力。 通过套接字列表迭代 – 并不那么重要,因为当你广播时 – 无论如何它都会迭代。

所以这里是小的类,保持套接字,删除它们在需要时(断开),并发送消息给所有可选的例外的单个套接字。

function Sockets() { this.list = [ ]; } Sockets.prototype.add = function(socket) { this.list.push(socket); var self = this; socket.on('disconnect', function() { self.remove(socket); }); } Sockets.prototype.remove = function(socket) { var i = this.list.indexOf(socket); if (i != -1) { this.list.splice(i, 1); } } Sockets.prototype.emit = function(name, data, except) { var i = this.list.length; while(i--) { if (this.list[i] != except) { this.list[i].emit(name, data) } } } 

这里是使用的例子,用户用一些数据发送'post'消息,并且服务器只是将它发送给除了原始发送者之外的所有集合:

 var collection = new Sockets(); io.on('connection', function(socket) { collection.add(socket); socket.on('post', function(data) { collection.emit('post', data, socket); }); }); 

实际上它也可以用作房间。