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 如何在重新连接后修复双重事件

Socket.io 客户端在突然断开连接后无法重新连接到服务器

socket.io 在 x 秒/第一次尝试获取响应失败后停止重新发出事件