Задержка на отправку сообщений.

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Всем привет!
Помогите продумать правильную логику. Есть сайт, который парсится в режиме реального времени, информация может меняться чаще чем раз в секунду. Есть несколько телеграм аккаунтов, в которые отправляется спаршенная по определённым критериям для каждого аккаунта информация с этого сайта.
Сейчас шаблон работает в цикле: собрал информацию; выбрал первый аккаунт; выбрал нужную информацию для этого аккаунта; отправил в телегу; перешёл ко второму аккаунту и тд. Как только аккаунты закончились снова парсим сайт. Всё это происходит очень быстро и работает чётко, инфа прилетает вовремя.
Но теперь возникла необходимость отправлять на пару аккаунтов информацию с задержкой 10сек. На остальные аккаунты всё должно прилетать так же как и ранее - в реальном времени. Как это можно реализовать? Паузу в шаблон ставить нельзя, так как первая часть пользователей должна всё получать как и ранее без задержек.
Пока вижу один вариант - вывести отправку сообщения для каждого аккаунта в отдельный шаблон. Сколько аккаунтов - столько шаблонов, шаблон будет из одного кубика - отправка сообщения, и на некоторые аккаунты перед этим кубиком будет ещё установлена пауза.
Пока аккаунтов не много, это ещё можно сделать, но их количество постоянно растёт, и боюсь со временем будет каша. Да и запуск проекта в проекте, я боюсь, может повлечь некоторую потерю времени.
Извините, много букав, но старался описать всё за один раз )
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113
надо напротив каждого аккаунта в базе зарезервировать метку тайм штампа, поле для задержки и поле отправляемых данных.
Собрали данные, выбрали аккаунт , получили задержку для аккаунта, установили задержку в тайм штамп (при условии что там уже нет метки), записали данные для отправки в поле данных. и так все аккаунты.
Во втором цикле пробежаться по всем аккаунтам, выбрать, получить тайм штамп, если разрешает то отправить данные из поля данных. очистить поля тайм штампа и данных.
 

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Не совсем понял. Пробежался по всем аккаунтам, добавил данные к каждому и задержку, если нужна.
Отправляю сообщения всем кто без задержки в первую очередь. А как отправлять тем, кто должен получить с задержкой? Если я буду ставить паузу, то шаблон будет простаивать, а он этого не должен делать, он должен постоянно парсить без каких либо пауз.
 

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28
Постараюсь объяснить на конкретном примере, хоть у меня сайт-донор совсем другой тематики, но принцип точно такой же.
Например есть сайт со статистикой спортивного события (курсом биткоина и тд, это не важно) в реальном времени. Есть подписчики которые хотят получать уведомления без задержек когда забит гол или что-то ещё.
А есть ещё бесплатные пользователи, которые не оплатили доступ, но хотят убедиться что сервис рабочий, и всё отправляет верно. Но так как они не оплатили полноценный доступ, то получайте статистику с задержкой.
Но! Оплатившие доступ пользователи страдать от этого не должны, и получать данные должны моментально
 

Phoenix78

Client
Read only
Регистрация
06.11.2018
Сообщения
11 790
Благодарностей
5 689
Баллы
113
не надо никаких пауз. я понял, вам нужна очередь сообщений. нужен отдельный список для данных
первая часть парсит.
вторая для каждого аккаунта формирует данные и добавляет в список в конец. что то вида Time::Accaunt=Номер Акаунта:: Data
третья часть где отправка происходит, получает номер аккаунта в цикле, по номеру аккаунта получает задержку аккаунта из базы, а из списка по регулярке (Accaunt=Номер Акаунта) первую сверху строку без удаления, анализирует время добавления и текущее время с учетом задержки аккаунта, и если можно то удаляет из списка строку и отправляет данные в телегу, если не подошло время то данные остаются в списке пока не придет их время на отправку.
и зациклить на парсинг.
естественно список не надо привязывать в файлу, пусть в памяти все это крутиться.
 
  • Спасибо
Реакции: Evgeny76

Evgeny76

Client
Регистрация
11.09.2015
Сообщения
192
Благодарностей
85
Баллы
28

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)