vknet / vk

Vkontakte API for .NET
https://vknet.github.io/vk/
MIT License
565 stars 221 forks source link

Исправить синхронизацию в механизме контроля частоты запросов к api #710

Closed truecooler closed 5 years ago

truecooler commented 5 years ago

Проблемка В методе InvokeBase файла VkApi.cs есть реализация механизма контроля частоты запросов к vk api, использование которой совместно с LongPoll'ом(или любом другом продолжительном запросе) приводит к проблеме, а именно: В случае, если сгенерировать запрос к api, когда LongPoll уже ждет событий, то запрос не будет выполнен, пока LongPoll не получит любое событие, и не разблокирует _expireTimerLock. Таким образом, ожидая событие в течении 25 секунд(по-умолчанию), параллельно сгенерированное пользователем обращение к api зависнет на 25 секунд, прежде чем начать выполняться. alt text

Решение 1:

Минус решения 1: Выравнивание временных рамок будет работать корректно со стороны клиента, но возможна ситуация, когда запросы дойдут до сервера с опозданием, либо же все сразу. Такое возможно в случае, если произойдет сетевая задержка или лаг. В таком случае, мы рискуем исчерпать разрешенные запросы в секунду и сервер вернет ошибку.

Решение 2:

Предлагаю обсудить, как можно отловить факт соединения HttpClient с сервером/факт дохода запроса на сервер? Альтернативные решения приветствуются.

itsokto commented 5 years ago

736 Вообще отказались от lock, но реализовать решение 2 пока неизвестно как.

inyutin-maxim commented 5 years ago

Добавлено к следующему релизу. Либо можете получить обновление из альфа канала: https://www.myget.org/F/vknet