214 похожих чатов

Привет! У тебя же популярные боты, наверняка, можно вопрос? У нас есть

относительно популярный бот (Жабабот @tgtoadbot, чуть больше 100к активных игроков в телегарме сейчас, многие и них активно пишут в чатах команды боту) и мы с проблемой столкнулись в телеграме.

Вечерами у нас ловятся тормоза, но необычные. В какие-то моменты бот перестаёт получать ивенты от телеграма. Секунд на 5. Потом снова начинает получать их.
Но тоже немного хитро. Если в момент зависания написать что-то в чат, то он их не получит, как я писал выше. И, когда бот снова начинает получать ивенты и работать в других чатах, в тестовом чате, где я давал команду, он не получит ивент, пока что-то ещё в этот чат не написать (не обязательно команду бота). И вот в этот момент он получит и новый ивент, и старый.

Вы с таким не сталкивались?

Причём неважно, лонгполл мы используем или вебхуки. Причём проблема не в сервере, именно запросы от телеграма перестают приходить, судя по логам nginx (в момент этих тормозов видно, что в это время нет обращений в access_log)

Извините, что сумбурно, хотел просто детально проблему описать.

У вас боты явно популярнее нашего, может сталкивались.

57 ответов

76 просмотров

Попробуй поставить вечером на фон пинги к гуглу с записью в лог. Это могут быть огрехи провайдера/сервера

У вас очередь обработки существует?

Ruslan-Gabdrakhmanov Автор вопроса
Vorobuskaᅠ Forever
Попробуй поставить вечером на фон пинги к гуглу с ...

А это не противоречит тому, что после этого "разлагивания" бот может начать получать сообщения от чатов, но в тестовом не получит старый ивент, пока какое-то сообщение не напишешь в чат?

Ruslan-Gabdrakhmanov Автор вопроса
Fᴏʀᴅᴇɴ
У вас очередь обработки существует?

Да, формируем. Но, думаю, что не в скрипте дело, потому что по access логу nginx тоже видны эти зависания. Что в какой-то момент секунд на 5 перестают приходить запросы от телеграма. (очередь по старым запросам продолжает работать. У нас есть несколько типов событий, где бот раз в пару секунд редактирует старые сообщения, эти события продолжают работать) А потом всё опять ок

Ruslan Gabdrakhmanov
А это не противоречит тому, что после этого "разла...

Ну... Я если честно с такими бедами не сталкивался, я не обладаю ботами с такой адской нагрузкой, но это могут быть типичные странности телеги после подобных приколов с сетью

Ruslan-Gabdrakhmanov Автор вопроса
Vorobuskaᅠ Forever
Ну... Я если честно с такими бедами не сталкивался...

Ну да, кто их знает. Это проверю, спасибо большое за идею

Ruslan Gabdrakhmanov
Да, формируем. Но, думаю, что не в скрипте дело, п...

Я сталкивался с таким поведением когда возвращал телеге не 200 код, она начинает ретраить с увеличивающимся сроком Возможно у вас такая же фигня

Ruslan-Gabdrakhmanov Автор вопроса
Fᴏʀᴅᴇɴ
Я сталкивался с таким поведением когда возвращал т...

Этот чат может и 30 и 40 минут висеть (больше просто не тестили), пока сообщение новое не напишешь. При этом другие чаты летают

Ruslan Gabdrakhmanov
Этот чат может и 30 и 40 минут висеть (больше прос...

А, выглядит как баг в ботапи) Поставьте свой инстанс и попробуйте воспроизвести

Ruslan-Gabdrakhmanov Автор вопроса
Fᴏʀᴅᴇɴ
А, выглядит как баг в ботапи) Поставьте свой инста...

Я почитаю что это. Примерно понимать, но не имел дела)

Ruslan-Gabdrakhmanov Автор вопроса
Mr. Yehor 🇺🇦 🇺🇦
Есть такое, знаю одного бота с такими траблами

Не знаете, как пытались решать? Видимо, не решили до сих пор?

и как потестишь напиши сюда или в лс передать сможем админам из тг

Ruslan-Gabdrakhmanov Автор вопроса
Magic
и как потестишь напиши сюда или в лс передать смо...

Да, обязательно. Завтра сеть проверю и отпишусь

Ruslan-Gabdrakhmanov Автор вопроса
Magic
А ты разраб главный?

Нет, это бот моего брата. Я сейчас с разработкой ему помогаю. Сам бот от его аккаунта зарегистрирован

Было такое. Мне помогло отключение ipv6 адреса (хз почему, на сайте каком-то нашел)

Хм, очень похоже на мои проблемы... Когда пофиксите, напишете сюда?)

Попробуйте в момент "затыка": curl -s "https://api.telegram.org/%BOT_TOKEN%/getWebhookInfo"|jq . и проанализируйте ответ: { "ok": true, "result": { "url": "........../polechudesbot/update", "has_custom_certificate": false, "pending_update_count": 0, "last_error_date": 1629897596, "last_error_message": "Wrong response from the webhook: 502 Bad Gateway", "max_connections": 40, "ip_address": "............." } }

Ruslan-Gabdrakhmanov Автор вопроса

Сохранил. Пасиба. А вот тут есть макс коннекшен. Его как-то можно менять? Или как-то сделать, чтобы коннекты как можно быстрее отрабатывали? Типа не ждать выполнения моего скрипта, а сразу ответить ок и пусть новые шлёт)

Это (в данном случае дефолтное) значение потоков, которые сервер открывает чтоб слать вам апдейты. После того как обнаружит что ваш бекенд "ожил".

Ruslan-Gabdrakhmanov Автор вопроса

Но влиять на него можно как-то

Я так словил ошибку, когда пытался писать "однопоточный" код.

Да, через метод setWebHook

Ruslan-Gabdrakhmanov Автор вопроса

Чёт я не понимаю)

зачем курлом? обычным гетом можно в браузере

Ruslan Gabdrakhmanov
screenshot Чёт я не понимаю)

Вы токен же подставили?

Ruslan Gabdrakhmanov
screenshot Да...

ссылку просто в браузере можно открыть

Ruslan Gabdrakhmanov
screenshot Да...

ещё желательно bot после .org/

Ruslan-Gabdrakhmanov Автор вопроса
e\\/gen
ещё желательно bot после .org/

Так сильно лучше, спасибо))

Стикер

Ruslan-Gabdrakhmanov Автор вопроса

🤔 идею понял, звучит разумно, спасибо. Подумаю

Ruslan Gabdrakhmanov
screenshot Так сильно лучше, спасибо))

1629900501 -> 2021-08-25 17:08:21, сегодня три часа назад Это вы вебхук ставили тогда?

Ruslan Gabdrakhmanov
screenshot Так сильно лучше, спасибо))

рекомендую max_connections 100 поставить при установке вебхука а еще подумать насчет внешней очереди, а не jobqueue в ptb

И зачем это, интересно 🤔

Ruslan Gabdrakhmanov
screenshot Так сильно лучше, спасибо))

Так это обычный запрос getWebhookInfo Хз, что такого особенного вам даст, но ждем результатов исследования Я лично с ним только очередь проверяют

Ruslan-Gabdrakhmanov Автор вопроса
Dev ✨
Так это обычный запрос getWebhookInfo Хз, что так...

Стоило мне собрать консилиум умных людей, как фризы прекратились :)

Ruslan Gabdrakhmanov
Стоило мне собрать консилиум умных людей, как фриз...

Тут ламповый чатик, да. Обсирают и самоутверждаются только периодически и только некоторые)

Стикер

Ruslan-Gabdrakhmanov Автор вопроса
Dev ✨
Тут ламповый чатик, да. Обсирают и самоутверждаютс...

Научусь программировать и буду тут как влитой некоторый)

Ruslan-Gabdrakhmanov Автор вопроса
Kirill ‌Grinchuk
А давай я тебе про sql-иньекции расскажу?)

У нас так однажды всем игрокам ники на матерный поменяли :)

Ruslan Gabdrakhmanov
У нас так однажды всем игрокам ники на матерный по...

Ой, им лучше не рассказывай... тут у нас злопамятные школьники без самоиронии бывают

Dev ✨
Private message for @grinrill

Private message for @id10987654321

Стикер

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

Обсуждают сегодня

а через ESC-код ?
Alexey Kulakov
29
30500 за редактор? )
Владимир
47
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
Ребят в СИ можно реализовать ООП?
Николай
33
Вот еще странный косяк, подскажите как бороться. Я git clone сделал себе всего embassy и примеры там запускаю. Всё хорошо. Но вот решил в cargo.toml зависимости не как в приме...
Lukutin R2AJP
2
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта