Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Socket.io中的“.acks”键是什么_Javascript_Node.js_Sockets_Socket.io - Fatal编程技术网

Javascript Socket.io中的“.acks”键是什么

Javascript Socket.io中的“.acks”键是什么,javascript,node.js,sockets,socket.io,Javascript,Node.js,Sockets,Socket.io,我的客户端socket有一个名为socket.acks的属性。这种特性持续增长,几分钟内,就有5000多个肠道 它们看起来像这样: acks: { '11': [Function], '12': [Function], '13': [Function], '14': [Function], '15': [Function], '16': [Function], '17': [Function], } 编辑 我的服务器充当在

我的客户端
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);
});

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

一旦消息被确认,它将从此对象中删除,因此我猜您的客户机没有确认消息,而服务器期望确认发生

更多信息

编辑

我从未使用过类似的设置,因此根本不知道它是否应该工作(我预见到当一个客户端断开连接时,未确认的消息会出现问题,尽管我还没有仔细查看
socket.io
实现,以查看在这种情况下是否会正确清除任何挂起的确认)

我现在能想到的唯一可能的解决方案是(尽管它在功能上与您的相同):


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

一旦消息被确认,它将从此对象中删除,因此我猜您的客户机没有确认消息,而服务器期望确认发生

更多信息

编辑

我从未使用过类似的设置,因此根本不知道它是否应该工作(我预见到当一个客户端断开连接时,未确认的消息会出现问题,尽管我还没有仔细查看
socket.io
实现,以查看在这种情况下是否会正确清除任何挂起的确认)

我现在能想到的唯一可能的解决方案是(尽管它在功能上与您的相同):


好的,如果我的服务器充当两个客户端之间的代理怎么办?一个客户端向服务器发送消息(以及回调函数)。然后将此消息和函数发送给其他用户。因此,实际上,我正在发出一个函数(文档中说是回调),但实际上我并不期待回调。@Kousha您能用一些代码更新您的问题(客户端如何发送消息以及服务器如何将消息代理给另一个客户端)?好的,如果我的服务器充当两个客户端之间的代理怎么办?一个客户端向服务器发送消息(以及回调函数)。然后将此消息和函数发送给其他用户。因此,实际上,我正在发出一个函数(文档中说是回调),但实际上我并不期待回调。@Kousha您能用一些代码更新您的问题吗(客户端如何发送消息,服务器如何将消息代理给另一个客户端)?
socket.on('on_data_from_client1', function (data, cb) {
  client2.emit('data_from_client1', data, function(moreData) {
    return cb(moreData);
  });
});