Telegram Bot (новое обновление в новой теме) с telegrambots-spring-boot-starter - PullRequest
0 голосов
/ 16 января 2019


Я написал бота LongPolling, который работает с одним обновлением за раз.
Я хочу, чтобы он работал с 2 или более обновлениями по многопоточности.
Вот пример того, что я имею в виду. Я нашел этот пример в статье «Оптимизация производительности (Python Telegram Bot)».

Пример: у вас запущен Echobot и два пользователя (пользователь A и пользователь B) отправить сообщение боту одновременно. Может быть, пользователь А был немного быстрее, поэтому его запрос прибывает первым, в форме объекта Update (Обновление А). Диспетчер проверяет обновление и решает, что оно должно быть обрабатывается обработчиком с помощью функции обратного вызова с именем echo. На в это же время приходит обновление пользователя B (обновление B). Но Диспетчер не завершено с обновлением A. вызывает функцию эха с обновлением A, который отправляет ответ пользователю A. Отправка ответа занимает некоторое время (см. Расположение сервера), а Обновление B остается нетронутым в течение этого времени. Только после завершения функции эха для обновления A диспетчер повторяет тот же процесс для обновления B.

В этой статье говорится, что для решения такого рода проблем библиотека телеграмм python предоставляет способ явного запуска функции обратного вызова (или любой другой функции) в отдельном потоке.
Может кто-нибудь объяснить мне, как это сделать с Java ???
Вот мои части кода:


BOT

@Component   
public class SenderBot extends TelegramLongPollingBot {

private static final String BOT_TOKEN = "token";
private static final String BOT_NAME = "bot_name";

static {
    ApiContextInitializer.init();
}

@Override
public void onUpdateReceived(Update update) {

    if (update.hasMessage()) {
    ...
    some code
    ...
    }
}
}



SpringBootApp

@SpringBootApplication
public class SenderBotApplication {
public static void main(String[] args) {
    SpringApplication.run(SenderBot.class, args);
    }
}

Если кто-то знает другой путь без многопоточности - скажите мне, как.
Буду очень признателен за любую помощь и примеры.

1 Ответ

0 голосов
/ 22 января 2019

Я нашел решение.

@Override
    public void onUpdateReceived(Update update) {

        new Thread(new Runnable() {
            @Override
            public void run() {
                if (update.hasMessage()) {
                // code goes here.
                }
              }
       }).start
}

Этот код прекрасно работает одновременно со многими пользователями.Но я не знаю, исправить это решение или нет ...

...