VK API отклоняет запросы наобум, ссылаясь на высокую частоту. Как решить?
Добрейший день. VK API чудит, как не чудил еще никто... В документации написано, что частотное ограничение - 3 запроса в секунду. Пишу на Node.JS. Создал функцию и пакет переменных для контроля частоты обращения с помощью setTimeout, count и тому подобное. Все временные метки, а именно в events: (beforeSend, response), говорят о том, что запросы совершаются ТОЧНО не чаще, чем 3 штуки в 1000 мс, а бывает и того дольше. Но ВК, начиная с 10 запроса из 30 выдает ошибку Too many requests per second (Error code: 6). Бред уже начался. Ок, решил проверить как оно работает "вручную".
Написал функцию send() внутри которой просто функция запроса с колбеком и прочим. Вызвал send 9 раз подряд (внутренние замеры показывают, что отправлялось это дело раз в 1 мс) НИ ОДНОЙ ОШИБКИ, все у VK API хорошо. Ок, я решил выяснить предел - собсна он равен 9... На 10 запросе вк начинает выдавать все ту же ошибку.
Где. Здесь. Логика?! Я уже понял, что VK API делали криворукие, по частоте возвращения ошибок (утром-днем-вечером по 3 ошибки в polling вылетает 100%) 501 502 с текстом "Internal server error: Unknown error, try later", "connect ECONNREFUSED", "Error: socket hang up". Проще говоря, за историю работы с ВК Апи, последний развлекался как мог, самыми разными способами. Но вот чтобы полностью противоречить документации при отсутствии логики в принципе как таковой - это перебор.
Кто может подсказать как быть в такой ситуации или я зря тут гневился и на самом деле я ужасно ступил?
Сам сейчас дописываю приложение которое постит в группы. Так вот, использую модуль vksdk, тестово разослал 10 фото в 12 групп, чтобы отправить только одно фото в одну группу нужно сделать.
1. Запрос сервера на загрузку.
2. загрузить фото.
3. Сохранить фото
3*10=30 запросов по загрузке фото на один пост
+ собственно отправить сам пост с этим фотками это 31
31*12=372 запроса) Ну это если я ни про что не забыл, хотя я конечно забыл, ведь есть ещё запросы на отображение фоток пользователя. Ну да хрен с ними. Так вот, ни одной ошибки. Ни разу)
Филипп Фастер, вероятно. Потому что ошибки я думаю всё же случаются, просто он отправляет запросы повторно. Когда обращений много он прям задумывается)
jasonOk, с execute давно разобрался. Популярность ВК вынудила меня написать бота для пересылки разной информации в Telegram. Намного проще это делать, имея расширяемую и доступную структуру, поэтому и решил сделать SDK. Я вынужден столкнуться с бездарностью API. К слову... VK API далеко не достойная. Года 3-4 назад я также пользовался ей. Так тогда несоответствие документации было около 60%. Я выяснял правильные названия методов через службу поддержки. Собирался написать маленькое приложение, а получилось 3-4 дня общения с СБ. ВК ужасное существо во всех смылах. С телеграм апи проблем не было за долгое время разработки.
Вы учитываете время обработки запроса и доставки, или считаете только стартовые моменты?
Запросы имеют длину. Если ответ на какой-то из трёх вы заканчиваете принимать уже после 1000ms, то только после его окончания стоит отправлять четвёртый.
Если всё быстро и ответы приняли, вписавшись в 1000ms, надо выдержать какой-то минимальный гэп после 1000 ms перед четвёртым запросом. На всякий пожарный.
Я тоже сначала подумал, что нужно только после окончания других запросов отсылать, мол не "обращения", а "подключения". Но это опровергается практическим экспериментом, когда ВК спокойно и положительно обрабатывает 4
и более одновременных подключения. Мне кажется, что порога на подключения нет, а именно на обращения. Гап пробовал оставлять 200мс - все равно выдает ошибку на одном-двух из 30 запросов. Что-то не так. Возможно... возможно я делаю что-то не так, но что именно - не понимаю. Надо попробовать сделать 3 одновременных Подключения именно... Но скорость снизится сильно:(
у ВК АПИ много разных лимитов, вы прочитали наиболее общий, подробнее в документации указанно, что например для 1 секунды, один лимит, лимиты для 1го часа НЕ равны суммам лимитов по секундам и тд.
тоже самое касается отдельных запросов, например на отправку сообщений (скорее всего вы его используете), там СОВСЕМ другие лимиты, хотя работает также в начале 3 запроса в секунду, но суммарно например 9 запросов в минуту (это условно, нужно смотреть на документацию) и например 30 запросов в час, 100 запросов в день.
У вкапи есть два лимита частотный и количественный. У меня вылетает частотный. Частотный делится на три типа: secure, ads и все остальные. Я делаю запрос к users.getSub... Это информация из документации. Можете приложить ссылку на документацию, где указано, что у сообщений другие лимиты или хотя бы существуют лимиты в час?