在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); }); });
实际上它也可以用作房间。
- 检查一个node.js模块是否可用
- 保持SSH连接在nodejs中
- 这是正常的bluebird / node.js / expresserror handling?
- XMLHttpRequest事件onProgress仅在文件完成上载时被触发
- 创build一个自己的对象来使事件在代码完成中有什么优点/缺点?
- node.js promise-sequene在每个任务之间运行一个函数
- 像Trello这样的项目,在Mongoose中创build一个合适的数据库
- 如何testingnode-webkit中的跨源数据?
- Uncaught TypeError:无法读取未定义的属性“推”(React-Router-Dom)