Здравствуйте. Есть код в index.php на который приходят запросы от телеграмм бота (webhook использую)
Сам index.php
$ bot = new Telegram(TELEGRAM_TOKEN); $ message_id = $ bot->sendMessage($ bot->chat_id, 'start'); $ message_id = json_decode($ message_id, true); $ message_id = $ message_id['result']['message_id']; $ a = 0; for ($ i = 0; $ i < 10; $ i++) { $ result = "$ i/"; for ($ j = 0; $ j < 10; $ j++) { $ result2 = $ result . $ j . '/'; for ($ k = 0; $ k < 10; $ k++) { $ result3 = $ result2 . $ k; $ bot->editMessageText($ bot->chat_id, $ message_id, $ result3); } } } $ bot->editMessageText($ bot->chat_id, $ message_id, 'end');
WebhookInfo
{ "ok": true, "result": { "url": "https://.../index.php", "has_custom_certificate": false, "pending_update_count": 3, "last_error_date": 1517492674, "last_error_message": "Read timeout expired", "max_connections": 40 } }
Вот так выглядит метод sendMessage()
function sendMessage (string $ chat_id, string $ text):string { $ get = '/sendMessage?'; $ get .= 'chat_id='.$ chat_id.'&'; $ get .= 'text='.urlencode($ text).'&'; $ get .= 'parse_mode='.$ this->settings['parse_mode'].'&'; $ get .= 'disable_web_page_preview='.$ this->settings['disable_web_page_preview'].'&'; $ get .= 'disable_notification='.$ this->settings['disable_notification'].'&'; $ get .= 'reply_markup='.$ this->settings['reply_markup']; return $ this->my_user($ this->api.$ get); }
Вот так выглядит метод editMessageText()
function editMessageText (string $ chat_id, int $ message_id, string $ text):string { $ get = '/editMessageText?'; $ get .= 'chat_id='.$ chat_id.'&'; $ get .= 'message_id='.$ message_id.'&'; $ get .= 'text='.urlencode($ text).'&'; $ get .= 'parse_mode='.$ this->settings['parse_mode'].'&'; $ get .= 'disable_web_page_preview='.$ this->settings['disable_web_page_preview'].'&'; $ get .= 'reply_markup='.$ this->settings['reply_markup']; return $ this->my_user($ this->api.$ get); }
Метод my_user() просто отправляет curl запрос телеграмму
Проблема заключается в том, что при отправке сообщения боту все запросы попадают в ожидание. Это можно пронаблюдать, если посмотреть на WebhookInfo а именно на “pending_update_count” оно увеличивается постоянно, при отправке новых сообщений боту. Если посмотреть на “last_error_message”, то увидим, что тайм-аут чтения истек. И телеграмм постоянно отправляет повторные запросы мне на сервер. В итоге получается бесконечно выполняющейся код, который ко всему еще и криво работает
На просторах stackoveflow нашел такую же проблему https://stackoverflow.com/questions/44950295/encountering-read-timeout-expired-error-by-webhook-after-60-sec-of-execution, но это не помогло
Как решить эту проблему? Help me pls!!!
И еще вопрос. Почему при отправке сообщений, все запросы от телеграмма на сервере становятся в очередь? Как сделать чтобы сразу выполнялись, без ожидания выполнения предыдущих запросов?