【发布时间】:2017-09-19 04:23:45
【问题描述】:
找了半天也没找到解决办法。
我构建了一个 node.js 服务器,客户端可以更改“房间”以获取不同的信息。
每次客户端socket离开/加入房间时,我都会记录(socket.adapter.rooms或socket.rooms),它只显示客户端在一个房间(和它自己),看起来是正确的。
问题是当服务器向特定房间成员发送特定消息时,客户端收到重复消息.. 每次执行加入/离开操作时,消息都会重复一次。
例如: 第一个客户端加入“715R”房间,客户端从服务器接收消息,消息只发送一次,正确。 然后客户离开“715R”并加入“312R”,现在客户收到“312R”的消息重复两次!... 然后客户端离开“312R”并加入“715R”,现在客户端收到“715R”的消息重复三遍!...
但 socket.rooms/socket.adapter.rooms 日志只显示在一个房间中。
我的服务器端代码:
socket.on('join', function (msg) {
console.log(socket.rooms);
console.log('client:'+socket.id+" ask join:"+msg);
if (typeof socket['room'] !== 'undefined') {
console.log(socket.id + " try leave " +socket['room']);
socket.leave(socket['room'], function() {
console.log('client:'+socket.id+" leave ok:"+socket['room']);
console.log(socket.adapter.rooms);
delete socket['room'];
console.log(socket.id + " inRoom: " + socket['room']);
console.log(socket.id + " try join:" + msg);
if (checkroom(rooms, msg)) {
socket.join(msg, function() {
console.log(socket.id + " join sucess:" + msg);
socket['room'] = msg;
console.log(socket.adapter.rooms);
console.log('-------------------------');
});
}
});
}else {
console.log(socket.id + " inRoom: " + socket['room']);
console.log(socket.id + " try join:" + msg);
if (checkroom(rooms, msg)) {
socket.join(msg, function() {
console.log(socket.id + " join sucess:" + msg);
socket['room'] = msg;
console.log(socket.adapter.rooms);
console.log('-------------------------');
});
}
}
【问题讨论】: