2015-08-28 3 views
1

Мой клиент socket имеет свойство socket.acks. Это свойство постоянно растет, и в течение нескольких минут в нем насчитывается более 5000 кишечных инфекций.Что такое ключ `.acks` в Socket.io

Они выглядят примерно так:

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

EDIT

Мой сервер действует как прокси-сервер для передачи информации между двумя клиентами.

Сервер

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

ответ

0

Просматривая код, это объект, который содержит неподтвержденные сообщения.

Как только сообщение будет подтверждено, оно будет удалено из этого объекта, поэтому я предполагаю, что ваш клиент не подтверждает сообщения, пока сервер ожидает подтверждения.

Дополнительная информация here.

EDIT

Я никогда не использовал подобную установку, так не знаю, если это не должно работать на всех (я предвижу проблемы с неподтвержденными сообщениями, когда один из разъединяет клиентов, хотя я не смотрел близко достаточно для реализации socket.io, чтобы проверить, будут ли в этом случае исправлены какие-либо ожидающие действия.).

Единственное возможное решение я могу думать прямо сейчас это (хотя это функционально такой же, как у вас):

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

Хорошо, что если мой сервер действует как прокси-сервер между двумя клиентами? Один клиент отправляет сообщение на сервер (вместе с функцией обратного вызова). Это сообщение и функция затем отправляются другому пользователю. Таким образом, я испускаю функцию (которая, по словам документации, является обратным вызовом), но я действительно не ожидаю обратного вызова. – Kousha

+0

@ Kousha вы можете обновить свой вопрос с помощью некоторого кода (как клиент отправляет сообщение и как сервер передает его другому клиенту)? – robertklep

+0

@ Kousha обновил мой ответ. – robertklep

Смежные вопросы