Модуль ZeroMQ apache

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

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

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

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

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


person Mrigesh Pokhrel    schedule 24.07.2015    source источник
comment
Итак, в основном вам нужен пул соединений, который может использовать PHP, что-то похожее на то, что он делает с соединениями MySQL?   -  person N.B.    schedule 24.07.2015
comment
да !! как в .. он просто создает контекст и сокет, и я передаю в него данные !! это похоже, но не то же самое !!   -  person Mrigesh Pokhrel    schedule 24.07.2015


Ответы (1)


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

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

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

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

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

person N.B.    schedule 24.07.2015