【问题标题】:Socket.io: receive event triggering multiple timesSocket.io:接收事件触发多次
【发布时间】:2015-02-22 11:15:27
【问题描述】:

我正在尝试使用以下代码实现一个简单的锁:

服务器:

socket.on('lock', function(ressInfo) 
{
  var lock = false;
  if(ressLocks.indexOf(ressInfo.id) === -1)
  {
    ressLocks.push(ressInfo.id);
    lock = true;
  }
  socket.emit("lock", lock);
});

客户:

this.requestLock = function(ressInfo, callback)
{
  if(currentlyOnline)
  {
    socket.emit("lock", ressInfo);

    socket.on("lock", function(lock) 
    {
      // this gets triggered one additional time with each lock
      callback(lock);
    });
  }
  else
  {
    callback(true);
  }
}

在第一次通话中,我收到了一个带有 true 的回调,在第二次通话中,我收到了两个带有 false 的回调,在第三个通话中,等等。

这里发生了什么?为什么socket.on 会被多次调用?

【问题讨论】:

    标签: javascript node.js sockets callback socket.io


    【解决方案1】:

    我能想到两个原因:

    客户端:

    • 如果您多次注册锁定功能

    服务器端:

    • 我假设如果您在每次收到事件时都在运行 socket.on 函数,则如果您多次注册以侦听事件,就会发生这种情况

    以下是调试方法。

    安装节点调试

    执行节点调试“文件名”

    这将在调试模式下打开。现在检查 'lock' 的 socket.on 注册了多少次。我有类似的问题。以下是我的解决方法。

    //check if msgtype is already binded    
    if (!isMessageTypeBinded(msgType, someKey)) {
            // emit ot connection
            io.of(someKey).emit(msgType, message)
            return
        } else {
            // apply filter to all connection
            var sockets = io.of(someKey).sockets
            if (msgType) { // check for message tye
                activeMsgConn.push({
                    "msgType": msgType,
                    "accessKey": someKey
                })
                for (index in sockets) {
                    var socket = sockets[index]
                    socket.on(msgType, notifyNewMsg(socket))
                    io.of(someKey).emit(msgType, message)
                }
            }
        }
    

    我正在维护一个包含迄今为止建立的所有连接的数组。

    如果有新的 msg 出现,我将首先检查该 msg 是否已绑定到套接字并且不添加任何新的命名空间。否则我会遍历所有套接字连接并添加此处理程序。

    在您的情况下,代码不必相同,但实现可以相似。

    【讨论】:

    • 我在我的 socket.io nodejs 聊天应用程序中也有一个非常奇怪的行为,我的侧边栏填充了“用户加入”事件,并且在他自己触发了一段时间后,并且使两倍侧边栏中的用户,我不知道为什么会这样
    猜你喜欢
    • 1970-01-01
    • 2013-10-10
    • 2023-03-26
    • 2013-06-08
    • 1970-01-01
    • 2021-12-31
    • 2019-10-30
    • 2020-09-25
    相关资源
    最近更新 更多