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

Как правильно обработать параллельные запросы в Telegram Bot?

Делаю бота Telegram и заметил, что при выполнении долгих запросов, пока один пользователь ждёт ответа, параллельный запрос от другого пользователя не обрабатывается. Сервер обрабатывает запросы на PHP.

Простейший пример:

sleep(20);
$telegram->sendMessage('Обработано');


Два пользователя отправляют сообщения одновременно - первый получит ответ спустя 20 секунд, а второй - спустя 40.

Как правильно обойти это ограничение? Запускать скрипт через "exec", ещё как-то эмулировать многопоточность или есть другие варианты? Возможно, решается настройками сервера (Apache, Nginx)?
  • Вопрос задан
  • 74 просмотра
Подписаться 1 Средний 2 комментария
Пригласить эксперта
Ответы на вопрос 1
@MadridianFox
Web-программист, многостаночник
Возможно вы запускаете код в виде одного потока, как иногда советуют для быстрого старта разработки.
Обычно веб-приложения на php запускаются через php-fpm - менеджер процессов, который держит пул процессов, обрабатывающих входящие запросы. Если процессов не хватает - он создаёт новые, а когда они простаивают - завершает лишние.
Связки php-fpm + nginx хватает для подавляющего большинства веб-приложений.

Ещё стоит подумать о выводе обработки сообщений из веб-приложения в фон. Телеграму не интересно ждать 10-20 секунд когда отработает логика вашего приложения. И это и не нужно. Вы получили запрос, сразу ответили телеграму что всё ок, и можете положить сообщение в БД и дальше обработать его совсем другим процессом.
Часто для этого используются очереди сообщений. Веб-приложение кладёт сообщение в очередь, а другая программа следит за тем есть ли что-то в очереди, и если есть, то обрабатывает.
Хорошая реализация обработчика очередей на php - laravel queue. Сообщения кладутся в redis (или в БД если так хочется).
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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