Closed freefelt closed 1 month ago
Вот прям сейчас проект запущен в Xcode. Последний раз в боту было обращение 3.5 часа назад (я на каждую функцию повесил лог, чтобы понять что происходит перед зависанием). Проект выполняется, но бот ни на что не реагирует. http://127.0.0.1:8080 отвечает. Инициализация бота ровно такая же, как и в примере. Я только токен указал.
в примере используется лонгполлинг, это вообще далеко от слова продакшн, надо использовать вебхук, но впрочем и лонгполлинг не должен зависать. Единственное, что хочу отметить, на вебхуке не только у меня, но и у комьюнити реализованы боты, работают долго, и даже с платежами. В описании есть чат в телеграм, задайте свой вопрос там
Спасибо! Как снова зависнет, я попробую проверить продолжается ли вызываться getUpdates() у connection. Я правильно понимаю, что если он перестает вызываться, то еще раз connection.start() может помочь?
Ошибка внутри таски лонг пуллинг, на веб хуке аналогично. Если в getUpdates произойдет ошибка, тогда все останавливается
Task.detached { [weak self] in
guard let self = self else { return }
while !Task.isCancelled {
try await Task.sleep(nanoseconds: 100)
try await self.getUpdates()
}
}
Содержимое цикла обернул в do/catch и в случае ошибки выполняю рестарт
Спасибо! А можно попросить сам код, где и как ты делаешь рестарт, пожалуйста?
Нашел в твоем форке, видимо оно. Спасибо большое)
@ct4h спасибо за ответ, посмотрю детальнее то, о чем вы написали, но судя по коду - похоже на правду, при переписывании кода на async была допущена логическая ошибка и все говорит о том, что исключение затеряется
@nerzh идея с рестартом провалилась, как только перестал наблюдать за ботом, он перестал реагировать на команды)
обратил внимание, что после каждого запроса увеличивает переменную offset, может упираемся в предел?
Пока склоняюсь к варианту - с помощью https://github.com/vapor/queues-redis-driver.git , раз в час пересоздавать LongPollingConnection
@ct4h обновил библиотеку до мажорной версии. Логика вынесена, а пример сетевого слоя для вапора все там же в папке -example . Тоесть можно реализовать протокол клиента и использовать с другим фреймворком.
Изменения не сильно но ломающие, логика хендлеров такая же, изменена только начальная конфигурация. Можете попробовать проверить решилась ли проблема, но я так же просто делаю переподключение при ошибке. И не забывайте выставлять уровень логов debug. А в остальном, используйте лучше webhook
Все пользователи библиотеки все больше склоняются к тому. что это блокировка со стороны telegram. Для этого в инициализаторе TGBot появилось ограничение запросов в секунду для лонгполлинга и для вебхука попробуйти их
Привет! Есть ли у бота какой-то таймаут? Такое чувство, что, если не пользоваться им 3-4 часа, он просто перестает реагировать. Причем в консоль ничего не выводится, процесс Vapor запущен и работает, а бот не отвечает. Делал на основе примера.