Очередь запросов в PHP

12
R
На сайте с 03.07.2006
Offline
223
2096

При подключении функционала авторизации на сайте столкнулся с проблемой (теоретической) при использовании API Mail.ru vKontakte и т. п.

У них есть возможность транслировать действия пользователя в ленту "Что нового" от имени пользователя, то есть его действия на моём сайте.

Встал вопрос: если это делать синхронно, то есть при генерации страниц сайта, то интерпретатор PHP будет ждать пока отправится запрос на api.mail.ru получит ответ и только потом продолжит генерацию страницы. В этом случае возможны задержки, заметные пользователю.

Самым простым решением пришло в голову собирать очередь таких запросов в файл или таблицу mysql и по крону раз в минуту выполнять. Но я уверен, что существует и более элегантное решение.

Подскажите, что используют для решения этой и подобных задач?

[umka]
На сайте с 25.05.2008
Offline
456
#1

Обычно так и делается.

В принципе, если никакой другой работы с очередью не предполагается (типа поиска и т.п.), а только добавление в конец и удаление из начала, то можно хранить её в файле.

Лог в помощь!
R
На сайте с 03.07.2006
Offline
223
#2
'[umka:
;9068830']Обычно так и делается.
В принципе, если никакой другой работы с очередью не предполагается (типа поиска и т.п.), а только добавление в конец и удаление из начала, то можно хранить её в файле.

На самом деле я ищу универсальное решение, хочу использовать его и в других областях, например для почтовика, сервера обработки изображений и т. п. + возможность манипулировать задачами, например временем исполнения, установки задержек (с точностью до секунды/милисекунды), установка приоритета в очереди.

Время исполнения и приоритет можно сделать в мускуле, но задержки с точностью до секунды - нет.

[umka]
На сайте с 25.05.2008
Offline
456
#3
rengen:
На самом деле я ищу универсальное решение, хочу использовать его и в других областях, например для почтовика, сервера обработки изображений и т. п. + возможность манипулировать задачами, например временем исполнения, установки задержек (с точностью до секунды/милисекунды), установка приоритета в очереди.
Время исполнения и приоритет можно сделать в мускуле, но задержки с точностью до секунды - нет.

Универсального решения сделать не получится :) Получится только понять общее направление, в котором нужно двигаться, а допиливать под каждый конкретный случай придётся по-любому.

Задержку между "задачами" просто делайте в php-скрипте (sleep / usleep), чтобы не слишком яростно грузить API-шку.

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#4

Крон это теперь не элегантно?! Не ну нашли же слово то а.

✅ Мой Телеграм канал по SEO, оптимизации сайтов и серверов: https://t.me/leonidukgLIVE ✅ Качественное и рабочее размещение SEO статей СНГ и Бурж: https://getmanylinks.ru/ ✅ Настройка и оптимизация серверов https://getmanyspeed.ru/
R
На сайте с 03.07.2006
Offline
223
#5
LEOnidUKG:
Крон это теперь не элегантно?! Не ну нашли же слово то а.

Я не писал что крон это не элегантно, я написал что ищу более элегантное решение.

Возможно демон или библиотеку взаимодействующую с пулом операционки.

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#6
rengen:
Я не писал что крон это не элегантно, я написал что ищу более элегантное решение.
Возможно демон или библиотеку взаимодействующую с пулом операционки.

Я чёт вообще не понимаю... а крон, это не демон чтоли?! Просто объясните, почему вам крон не подходит?

R
На сайте с 03.07.2006
Offline
223
#7
LEOnidUKG:
Я чёт вообще не понимаю... а крон, это не демон чтоли?! Просто объясните, почему вам крон не подходит?

Писал уже:

Время исполнения и приоритет можно сделать в мускуле, но задержки с точностью до секунды - нет.

А про моментальное выполнение по мере поступления запросов я вообще молчу.

[umka]
На сайте с 25.05.2008
Offline
456
#8

Тогда напишите своего "демона" на перле, который будет постоянно висеть, и раз в 5 секунд проверять, не появилось ли чего в очереди в БД.

Это ж несколько строк всего.

LEOnidUKG
На сайте с 25.11.2006
Offline
1773
#9

ИМХО вы строите проблему на пустом месте.

Сделайте тогда так, пусть будет крон, который будет считывать данные и писать в БД. А далее когда уже юзер попадает на страницу, то ему данные из БД отображаются, а обновляются напрямую по ajax-у.

kxk
На сайте с 30.01.2005
Offline
990
kxk
#10

[umka], Демона можно написать и на баше :)

Ваш DEVOPS
12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий