2016-12-12 3 views
0

Я знаю, что это простой вопрос, но я не могу фраза мой вопрос достаточно для Google, чтобы дать мне ответ, который я хочу (потому что я новичок PHP)PHP - Очередь входящих сообщений HTTP

I Я пишу интеграцию между несколькими приложениями в PHP. Одно приложение выводит HTTP-сообщение типа webhook в файл .php на моем веб-сервере, который затем обрабатывает и отправляет данные в другие системы.

Предположительно каждый POST будет выполняться асинхронно, который представляет несколько проблем:

  1. Задача занимает много времени, чтобы закончить, что может вызвать несколько потоков, чтобы быть работают, чем сервер может обрабатывать
  2. Есть API вызывает ограничения на сервисы, которые я пытаюсь отправить также . Я мог бы значительно превысить их с большим объемом сообщений.

Есть ли простой способ «очереди» HTTP-запросов? (я не могу отказаться от POST, если я это сделаю, я не получу его снова).

Я решил принять запрос и сохранить его в базе данных (более быстрая задача) И затем выполнить задачу CRON через записи в базе данных. Это будет работать, но кажется беспорядочным.

Большое спасибо Бен

+0

Если ваш сервер не может обрабатывать много запросов во временной фразе, то время, когда вы обновляете или отправляете сервер на запросы. – KDOT

ответ

0

Если вы работаете над проектом малобюджетного, наиболее достаточным способом будет работа хрон ИМО.

Текущее приложение, отправляющее вашу полезную нагрузку на сервер, может вместо этого добавить запись запроса в базу данных. Затем сервер, получающий запросы, может просто запускать задание cron X раз в день, которое выполняет итерацию по записям базы данных и выполняет записи в виде запроса.

Недостатком этого является то, что ваши запросы не инициируются по мере того, как действие выполняется. Это займет время, чтобы выполнить действия (в зависимости от того, как часто выполняется ваше задание cron).

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

Самое легкое решение здесь состоит в том, чтобы выполнять полезные нагрузки, поскольку они должны быть выполнены, что означает, что вы отправляете запрос в любое время, когда вам нужно выполнить процесс. Если ваш сервер ограничен количеством запросов каждые X часов/минут и становится ограничением, то обновляется.

+0

Спасибо за ваш ответ @KDOT. Это не масштабный бюджетный проект, но я должен иметь возможность обрабатывать до 15 тыс. Запросов в день, и я также должен работать в пределах ограничений API. CRON/database кажется хорошим вариантом и также позволит мне отфильтровать повторяющиеся запросы (что может случиться). –

+0

Вы можете нажимать и вызывать запросы через базу данных, а затем выполнять скрипт, чтобы очистить запросы и делать то, что вам нужно, с ними каждые X секунд/минут/часов, а затем :-) Jus не забыл, что время выполнения скрипта делает это @BenRees – KDOT

0

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

Я предлагаю библиотеку enqueue. Вы можете перейти от простого транспорта очереди, например, enqueue/fs или enqueue/dbal` и перейти на RabbitMQ или AmazonSQS на более поздних этапах без особых проблем.

Смежные вопросы