需要向他所有的房间广播。所以我需要在服务器端disconnect
事件中获得socket.rooms。
但文档说这是不可能的,因为当断开触发器时,套接字已离开所有房间。
我深入了解源代码并找到了这段代码:
Socket.prototype.onclose = function(reason){
if (!this.connected) return this;
debug('closing socket - reason %s', reason);
this.leaveAll();
this.nsp.remove(this);
this.client.remove(this);
this.connected = false;
this.disconnected = true;
delete this.nsp.connected[this.id];
this.emit('disconnect', reason);
};
也许我应该覆盖这个方法并插入一个断开连接的事件,如下所示:
io.on("connection", function(socket){
var onclose = socket.onclose;
socket.onclose = function(reason){
this.emit('disconnecting', reason);
onclose.apply(socket, reason);
};
//other logic ...
}
但这段代码不起作用。 需要一些建议或其他解决方案。 TKS。
P.S:
节点版本:v0.12.3
socket.io版本:“1.3.2”
答案 0 :(得分:0)
不是一种聪明的方式,但最终还是有效的。
io.on("connection", function(socket){
var onclose = socket.onclose;
socket.onclose = function(reason){
this.__disconnecting(reason);
onclose.call(socket, reason);
};
socket.__disconnecting = function(reason){
console.log(socket.rooms);
};
// other logic ...
}