Socket io 在唱出并重新登录后返回两个数组
Posted
技术标签:
【中文标题】Socket io 在唱出并重新登录后返回两个数组【英文标题】:Socket io returns two arrays after singing out and signing back in 【发布时间】:2015-07-26 02:31:16 【问题描述】:我希望 socket io 向客户端发送一个数组。当用户第一次登录时这是成功的,但是当用户退出然后重新登录时,socket io 会发送两个相同的数组。我似乎无法弄清楚它为什么会这样。 这是我的代码服务器端:
var object = [];
query.find(
success: function(results)
for(var i=0; i< results.length; i++)
var file = results[i].toJSON();
for(var k in file)
if (k ==="javaFile")
for(var t in file[k])
if (t === "name")
temp = file[k][t];
var getname = temp.split("-").pop();
object[i] = getname;
);
io.on('connection', function(socket)
socket.emit("FileName", object);
console.log(object);
);
这是我的客户端:
socket.on('FileName', function(data)
var name = JSON.stringify(data);
console.log(data);
clients[socket.id] = socket;
【问题讨论】:
您在注销时并未取消订阅套接字。所以你的 socket.on('FileName') 被注册了两次。 【参考方案1】:当您退出时,请确保您取消订阅听众。
这样的事情应该可以工作:
socket.removeAllListeners("FileName");
或者你可以像这样取消订阅:
socket.removeListener("FileName");
参考:Google Groups Discussion
这意味着当您下次登录时,只有 1 个订阅可以发送。
Related Question
【讨论】:
我似乎无法让它工作。我得到TypeError: listener must be a function
。在我的退出路线中,我写了io.on('disconnect', function(socket)socket.removeAllListener('FileName'));
@wisemen 它的 socket.removeAllListeners
你最后少了一个 S
我也试过了,还是不行。 socket.removeAllListeners,我没有收到任何错误消息,但是它不会删除侦听器。以上是关于Socket io 在唱出并重新登录后返回两个数组的主要内容,如果未能解决你的问题,请参考以下文章
Socket.io - nodejs 服务器端。重新连接后传输关闭
socket.io javascript客户端在重新启动服务器后无法重新连接
socket.io 1.2.1 如何在重新连接后修复双重事件