Je viens de commencer à utiliser ZMQ. Je conçois une application dont le flux de travail est :
- un des nombreux clients (qui ont des adresses PULL aléatoires) PUSH une requête à un serveur à 5555
- le serveur est toujours en train d'attendre les PUSH des clients. Quand l'un d'eux arrive, un processus de travailleur est créé pour cette requête particulière. Oui, les processus de travail peuvent exister simultanément.
- Lorsque ce processus termine sa tâche, il envoie le résultat au client par PUSH.
Je suppose que l'architecture PUSH/PULL est adaptée à cela. Veuillez consulter le site corrigez-moi sur ce sujet.
Mais comment gérer ces scénarios ?
- le client_receiver.recv() attendra un temps infini si le serveur ne répond pas.
- le client peut envoyer une requête, mais elle échouera immédiatement après, et un processus travailleur restera bloqué sur server_sender.send() pour toujours.
Alors comment puis-je configurer quelque chose comme un délai d'attente dans le modèle PUSH/PULL ?
EDIT : Grâce aux suggestions de user938949, j'ai obtenu un réponse fonctionnelle et je le partage pour la postérité.
1 votes
Je ne suis pas un expert de 0mq, mais dans beaucoup de situations comme celle-ci, il est préférable que votre pool de travailleurs soit créé au démarrage plutôt que de créer des travailleurs en réponse aux messages. Peut-être que je ne vous comprends pas bien.
0 votes
Bon point. En fait, je prévois de pré-engraisser les travailleurs. Je viens de réaliser que cela peut être trivial avec 0mq.