Задать вопрос
@toha_man

Как сделать постоянное подключение к LongPoll вк при обрыве?

Написал простенький скрипт для личных нужд на питоне с помощью api от вк - LongPoll.
Работает как и требуется, но проблема в том, что через какое-то время контакт его отрубает.

Слушаю новые события так:
for event in longpoll.listen():
       далее код

спустя какое-то время получаю выход из скрипта и сообщение:
requests.exceptions.ConnectionError: ('Connection aborted.', ConnectionResetError(10054, 'Удаленный хост принудительно разорвал существующее подключение', None, 10054, None))


Подключаюсь так:
session = requests.Session()
login, password = ####

vk_session = vk_api.VkApi(login, password)
try:
	vk_session.auth(token_only=True)
	print('auth successful... proceed')
except vk_api.AuthError as error_msg:
	print(error_msg)


Какой конструкцией организовать код , чтобы работало вечно)))) ?
  • Вопрос задан
  • 2793 просмотра
Подписаться 1 Простой 1 комментарий
Решения вопроса 1
Мне кажется, как-то так:
for event in longpoll.listen():
	try:
		далее код
	except requests.exceptions.ConnectionResetError:
		тут вызов функции для попытки повторного подключения
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
Yar_Rick
@Yar_Rick
yareg.com
Ошибочно думать, что Long Poll - "вечное соединение", это не так. Сервер держит соединение какое-то время, например 30 секунд, и если никаких событий за этот период не случилось, он его сбрасывает. Если событие случилось, то соединение закрывается с ответом. Поэтому нужно снова предпринимать попытку соединения - либо после получения события, либо после истечения таймаута. В документации VK этот момент описан, а также можно при помощи параметра указать таймаут. Они рекомендуют 25 сек, так как большинство прокси сбрасывают соединение через 30 сек. Подробнее здесь - https://vk.com/dev/bots_longpoll
Ответ написан
@Zacher
for event in longpoll.listen():
когда ты ставишь wait 25, то список событий получается пустой, в итоге цикл for не запускается, а longpoll запускается заново
Так происходит пока не появится новое событие, например новое сообщение, но почему после него прилетает бан я тоже не пойму. У тебя есть решение этой проблемы? У меня тоже самое...
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы