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);
});
});