Socket.io 中的 `.acks` 键是什么

What is the `.acks` key in Socket.io

我的客户 socket 有一个名为 socket.acks 的 属性。这个属性不断的增长,几分钟之内,里面的条目已经超过了5000个。

它们看起来像这样:

acks:
   { '11': [Function],
     '12': [Function],
     '13': [Function],
     '14': [Function],
     '15': [Function],
     '16': [Function],
     '17': [Function],
   }

编辑

我的服务器充当在两个客户端之间发送信息的代理。

服务器

// Assume client1 is a reference to client1 socket, and client2 is for client2
socket.on('on_data_from_client1', function (data, cb) {
    // Here data and cb are sent to client2. 
    // I guess this is causing the .acks to be added since I am 
    // passing a function as last parameter to .emit.
    // But It is not me who should worry about the callback, but rather client2
    client2.emit('data_from_client1', data, cb);
});

查看代码,是一个包含未确认消息的对象。

一旦消息被确认,它将从此对象中删除,所以我猜测您的客户端没有确认消息,而服务器正在等待确认发生。

更多信息here

编辑

我从来没有使用过类似的设置,所以不知道它是否应该工作(我预见到当其中一个客户端断开连接时未确认消息的问题,尽管我没有仔细观察 socket.io 实施以查看在这种情况下是否会正确清理任何未决的确认)。

我现在能想到的唯一可能的解决方案是这个(虽然它在功能上与你的相同):

socket.on('on_data_from_client1', function (data, cb) {
  client2.emit('data_from_client1', data, function(moreData) {
    return cb(moreData);
  });
});