2015-07-24 1 views
2

Quelqu'un a-t-il une idée s'il existe déjà un module zmq pour apache? S'il y a s'il vous plaît partager le lien ou toute référence. Mon scénario est le suivant:Module apache ZeroMQ

serveur Config:

  1. Apache 2.4.12, avec prefork
  2. PHP 5.5
  3. ZMQ 4.0.X

Mon problème est, chaque fois que je essayez de créer une connexion socket zmq (pub) depuis mon application vers un service séparé (SUB) avec un périphérique streamer entre les deux, elle crée une nouvelle socket chaque fois que l'application est initialisée car mon apache est en mode prefork, créant de nouvelles instance (enfant) à chaque requête. Comment puis-je créer un seul contexte/socket où un nombre quelconque de requêtes PHP issues de processus fils apache suivants peuvent envoyer des données au socket, ce qui évitera la création de plusieurs sockets et épuisera les ressources système. Cela permettra également, je crois, de réduire les frais généraux dus à la création de nouvelles prises et de le rendre plus rapide. Comme alternative, est-il possible de créer un module Apache, dont j'accède aux fonctions et ressources à partir de l'application PHP et de l'utiliser pour envoyer des données, où le contexte et le socket ne sont créés qu'une seule fois et sont persistants charge.

+0

Donc, fondamentalement, vous voulez un pool de connexion que PHP peut utiliser, quelque chose de similaire à ce qu'il fait avec les connexions MySQL? –

+0

oui !! comme dans .. il suffit de créer un contexte et socket et je flux de données à elle !! c'est similaire mais pas pareil !! –

Répondre

1

Réponse courte - vous ne pouvez pas. Votre problème est Apache et comment cela fonctionne - il arrête le processus PHP après la fin de la requête. En outre, vous ne pouvez pas partager un contexte ou un socket créé dans un processus Apache entre les processus PHP. Je ne sais pas ce que vous essayez de faire ou pourquoi vous avez même épuisé les ressources système (assez bizarre), mais si j'étais vous j'utiliserais un serveur plus avancé qui utilise ZeroMQ en interne pour sa couche de transport: Mongrel2. Vous pouvez créer une extension PHP, servir PHP via FPM et avoir des requêtes proxy Apache sur votre PHP-FPM qui peut ensuite regrouper les connexions ZMQ déjà existantes. Cependant, je voudrais élargir la question de savoir comment les ressources sont épuisées si vite.

Si c'est tout trop, vous pouvez alors envisager ceci:

  • processus PHP engendrés par Apache acceptent les données et remplir une sorte de stockage (base de données, fichier, mémoire partagée)
  • Une fois que la fortune -queue a été rempli, avant de quitter les scripts PHP SIGUSR2 pour un processus démon qui lit la file d'attente
  • Vous avez un démon qui lit la file d'attente, active SIGUSR2 et envoie les données via le socket ZMQ - vous avez un seul processus qui utilise ZMQ maintenant et plusieurs processus PHP interagir avec elle

Étant donné que votre exigence est un peu clair, il est tout à fait possible que tout ce que j'écrit est pour rien si vous pouvez étendre votre question un peu plus d'informations.