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