Всем привет) Недавно начал писать бота для Telegram на языке JavaScript (Node.js). Уже научил его работать и с MySQL, и с Redis, но вот в один прекрасный момент я решил проверить насколько он станет быстрее работать, если сделать кластеризацию бота. Установил модуль «PM2» и запустил бота такой командой: «pm2 start app.js –i 2». Результат немножечко меня удивил, хотя и не должен был удивлять. Весь прикол в том, что для получения обновлений с серверов Telegram я использую Long Polling запросы. И если запустить с помощью модуля «pm2» echo-бота (бот, повторяющий присланное сообщение), который так же получает обновления через Long Polling запросы, то он будет повторять посланное ему сообщение дважды. То есть, я ему пишу, например, «Привет!», а он присылает мне два таких сообщения «Привет!» «Привет!», а не одно. Иначе говоря, бота, использующий Long Polling запросы, нельзя использовать вместе с «pm2 … -i 2».
Отсюда и вопрос: Как можно кластеризовать бота, использующий Long Polling запросы для получения обновлений?
Единственный, как я понимаю, вариант – это использовать встроенный модуль «cluster», но может кто-то еще что-то предложит) Буду благодарен за любую помощь :)
hoarywolf: Я сначала бота и писал под Webhook. И HTTPS сертификат с помощью Let's Encrypt получил, и Nginx установил, но мне не понравилось, как Webhook работает. Сообщения постоянно приходят с большой задержкой. Может, я рукожоп, чего-то не так делаю, не знаю) А по поводу более мощного сервера – можно, но не очень хочется) Я же бота пишу, можно сказать, для себя и в свое удовольствие, и даже если никто ничего дельного не предложит, то ничего страшного. Просто хочется решить перед собой поставленную задачу. В любом случае спасибо за отклик)
Влад: long polling не может быть быстрее webhook. Вам кажется.
В 1м случае вы пользуетесь сертификатом телеграма, во втором - вашим, т.е. шифрование и там и там. А webhook срабатывает сразу как только сообщение появляется в системе.
Никита: Да это все понятно) Я не говорю, что виноват HTTPS сертификат. Просто, когда я тестировал Webhook, сообщения приходили с большой задержкой. То есть, смотрите, я отправляю, например, тому же echo-боту сообщение «Привет!», а Telegram дергает мой сервер, то через секунду, то через пол минуты, как-то странно. То ли, повторюсь, я рукожоп, свой сервер настроил не так как надо и что-то тормозит запросы (хотя, проверял, все работает нормально), то ли Telegram был перегружен в то время, когда я проводил тесты с Webhook. А с Long Polling всё работает и очень быстро – написал «Привет!» и бот всегда тут же присылает «Привет!». Вот как-то так) Ну всё равно спасибо)