lamo4ok
@lamo4ok
Программист

Можно ли в PHP средствами самого языка или средствами некоей библиотеки реализовать подписку на некое событие извне?

Суть такова. Есть форма, которую заполняет пользователь. После этого он должен быть перенаправлен на следующую форму, но только после того, как сторонний сервис, через вебхук получивший данные с первой формы, вернет нам определенные данные, которые мы будем использовать во второй форме. И нужно организовать получение скриптом перенаправления тех самых данных и только после этого собственно совершать само перенаправление. Ключевой момент тут в том, что событие происходит вне потока исполнения скрипта, который его должен контролировать.

Если более конкретно, то есть php-скрипт#1, на который происходит редирект пользователя после заполнения и отправления им формы на одном из сервисов вроде Google Forms. Одновременно с этим данные через вебхук от сервиса форм уходят в Zapier, который совершает отправку данных из первой формы в одну из CRM и потом совершает вебхук на php-скрипт#2, передавая полученные от CRM id сделки и id контакта.

И как наш php-скрипт#2 получит эти данные, он их должен передать неким образом в php-скрипт#1, а тот уже подставить их в адрес редиректа и собственно совершить его. Первым делом пришла самая банальная мысль, создавать в php-скрипт#2 некий файл, куда записывать полученные значения, а в php-скрипт#1 соорудить цикл, проверяющий ближайшие 20 секунд, не создался ли файл с неким именем, забирать из него данные и удалять его.

Но схема, прямо скажем, пахнет костылями. В итоге хочется найти некий вариант, когда мы в php-скрипт#1 подписываемся на некое событие и ждем его, пока что оно не случится (конечно, не дольше, чем ограничено настройками исполнения php скриптов на вебсервере), а в php-скрипт#2 рождаем это событие. Как это возможно реализовать средствами php и некими SDK от тех или иных продуктов?

Думаю, может быть посмотреть в сторону Redis, с его схемой "ключ-значение", но можно ли там организовать что-то вроде подписки на ожидание появления ключа? Когда будет достаточно, используя их SDK в том или ином виде, написать что-то вроде:

$redisDrv->when("found", $key, function () {
    // do something;
})


Устраивать цикл, который будет опрашивать хоть Redis, хоть MySQL, хоть что угодно еще, не хочется, с таким же успехом я могу использовать цикл, в котором буду искать тот самый файлик. Хочется попробовать именно некую подписку на событие где-либо.
  • Вопрос задан
  • 208 просмотров
Пригласить эксперта
Ответы на вопрос 2
Maksclub
@Maksclub Куратор тега PHP
maksfedorov.ru
посмотрите в сторону веб-сокетов
по сути вы открываете соединение. отправляете данные, когда они придут -- сервер отдаст их клиенту
Ответ написан
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
Зачем куда-то подписываться если всё по очереди нормально вызывается хуками?
Они для этого и сделаны.
А какие там у вас цепочки зависит от того какие сервисы и как используете, если надо в кучу других сервисов передавать то так и надо делать, ничего страшного в этом нет.
Ответ написан
Ваш ответ на вопрос

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

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