Могут ли экземпляры одного и того же сценария PHP взаимодействовать друг с другом? - PullRequest
1 голос
/ 16 сентября 2009

Я предполагаю, что для каждого запроса страницы веб-сервер (например, Apache) создает новый экземпляр скрипта в памяти. Могут ли эти экземпляры общаться друг с другом во время работы? и передать данные тоже?

Ответы [ 4 ]

3 голосов
/ 16 сентября 2009

Если вы хотите передавать данные между скриптами в PHP, я предлагаю использовать memcached или базу данных. Или, возможно, БТР.

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

2 голосов
/ 16 сентября 2009

Я считаю, что предложения Мартина и Клетуса верны. Мой выбор будет зависеть от конечной цели сценария.

  • Сколько данных вы будете использовать? Можете ли вы справиться с накладными расходами внешнего процесса?
  • Какие данные вы обмениваетесь? Это нормализовано? Или это сейчас стоит нормализовать?
  • Вам нужно будет обратиться к этим данным позже? Или его можно выбросить после обработки?
  • Будут ли эти сценарии когда-либо выполняться на разных серверах?

  • Плоские файлы с механизмом блокировки

  • Реляционная БД
  • БД документов (хранилище ключей / значений, постоянное или нет)
  • Общая память (APC или основные функции)
  • Очереди сообщений (Active MQ и компания)

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

1 голос
/ 16 сентября 2009

Вы должны иметь возможность сделать это с некоторой общей памятью, как описано здесь: http://blog.taragana.com/index.php/archive/how-to-use-shared-memory-in-php/ (при условии, что вы не работаете в Windows)

1 голос
/ 16 сентября 2009

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

Если у вас есть какая-то непрерывная обработка, для которой вы хотите передавать данные, возможно, вы захотите взглянуть на другие модели веб-приложений, такие как сервлеты.

...