ZeroMQ apache модуль

У кого-нибудь есть идея, если уже есть модуль zmq для apache? Если есть, пожалуйста, поделитесь ссылкой или любой ссылкой. Мой сценарий выглядит следующим образом:

Конфигурация сервера:

  1. Apache 2.4.12, с префорком
  2. PHP 5.5
  3. ZMQ 4.0.X

Моя проблема заключается в том, что всякий раз, когда я пытаюсь создать соединение сокета (pub) zmq из моего приложения с отдельным сервисом (SUB) с промежуточным устройством, оно создает новый сокет каждый раз, когда приложение инициализируется, так как мой apache находится в режиме prefork. , создавая новый экземпляр (дочерний элемент) для каждого запроса. Как я могу создать один контекст / сокет, где любое количество PHP-запросов от последующих дочерних процессов apache может отправлять данные в сокет, что позволит избежать создания нескольких сокетов и исчерпания системных ресурсов. Это также, я считаю, уменьшит накладные расходы, вызванные созданием новых сокетов, и сделает это быстрее.

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

2

Решение

Короткий ответ — вы не можете. Ваша проблема в этом — Apache и как он работает — он завершает процесс PHP после завершения запроса. Кроме того, вы не можете совместно использовать контекст или сокет, созданный в процессе Apache, между процессами PHP.

Я не знаю, что вы пытаетесь сделать или почему вы даже исчерпываете системные ресурсы (довольно странно), но на вашем месте я бы использовал более продвинутый сервер, который использует ZeroMQ для внутреннего транспортного уровня: Mongrel2. Вы можете создать расширение PHP, обслуживать PHP через FPM, а затем иметь запросы прокси-сервера Apache к вашей PHP-FPM, которая может затем объединять уже существующие соединения ZMQ. Однако я бы расширил вопрос тем, как ресурсы истощаются так быстро.

Если это слишком много, то вы можете рассмотреть это:

  • Процессы PHP, порожденные Apache, принимают данные и заполняют какое-то хранилище (база данных, файл, разделяемая память)
  • После того как временная очередь заполнена, перед выходом из PHP-скриптов поднимите SIGUSR2 для процесса-демона, который читает очередь
  • У вас работает демон, который читает очередь, активирует при SIGUSR2 и отправляет данные через сокет ZMQ — у вас есть один процесс, который сейчас использует ZMQ и несколько процессов PHP, которые взаимодействуют с ним

Поскольку ваше требование немного неясно, вполне возможно, что все, что я написал, зря, так что если вы можете немного расширить свой вопрос с большей информацией.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]