web-dev-qa-db-fra.com

Comment utiliser les transports inproc et ipc de Zeromq?

Je suis un débutant à ZERMQ. ZeroMQ possède les transports TCP, INPROC et IPC. Je cherche des exemples utilisant python et inproc dans Winx64 et python 2.7, qui pourraient également être utilisés pour Linux.

En outre, je cherchais des méthodes de transport UDP et je ne trouve pas d’exemples.

Le seul exemple que j'ai trouvé est

import zmq
import zhelpers

context = zmq.Context()

sink = context.socket(zmq.ROUTER)
sink.bind("inproc://example")

# First allow 0MQ to set the identity
anonymous = context.socket(zmq.XREQ)
anonymous.connect("inproc://example")
anonymous.send("XREP uses a generated UUID")
zhelpers.dump(sink)

# Then set the identity ourself
identified = context.socket(zmq.XREQ)
identified.setsockopt(zmq.IDENTITY, "Hello")
identified.connect("inproc://example")
identified.send("XREP socket uses REQ's socket identity")
zhelpers.dump(sink)

Le cas d'utilisation auquel je pense est le suivant: UDP est une distribution d'informations. Tester Push/Pull en utilisant TCP est plus rapide ou serait inproc plus rapide.

Voici un exemple de test> ..............

Serveur:

import zmq
import time

context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("inproc://example2")

while True:
    #  Wait for next request from client
    message = socket.recv()
    print "Received request: ", message

    #  Do some 'work'
    time.sleep (1)        #   Do some 'work'

    #  Send reply back to client
    socket.send("World")

Client:

import zmq

context = zmq.Context()

#  Socket to talk to server
print "Connecting to hello world server..."
socket = context.socket(zmq.REQ)
socket.connect ("inproc://example2")

#  Do 10 requests, waiting each time for a response
for request in range (1,10):
    print "Sending request ", request,"..."
    socket.send ("Hello")

    #  Get the reply.
    message = socket.recv()
    print "Received reply ", request, "[", message, "]"

Message d'erreur:

 socket.connect ("inproc://example2")
File "socket.pyx", line 547, in zmq.core.socket.Socket.connect (zmq\core\socket.c:5347)
zmq.core.error.ZMQError: Connection refused
17
Merlin

À ma connaissance, le protocole UDP n'est pas pris en charge par 0MQ. De plus, IPC n'est pris en charge que sur les systèmes d'exploitation ayant une implémentation conforme à POSIX des canaux nommés; donc, sous Windows, vous ne pouvez vraiment utiliser que «inproc», TCP ou PGM. Cependant, au-delà de tout cela, l’une des principales caractéristiques de 0MQ est que votre protocole n’est qu’une partie de l’adresse. Vous pouvez prendre n’importe quel exemple, changer l’adresse du socket, et tout devrait quand même bien fonctionner (sous réserve, bien sûr, des restrictions susmentionnées). En outre, le ZGuide a de nombreux exemples (bon nombre d’entre eux sont disponibles dans Python ).

13
pblasucci

Si ( et seulement si ) vous utilisez les sockets ZMQ_PUB ou ZMQ_SUB - ce que vous ne faites pas dans les exemples que vous avez donnés, où vous utilisez ROUTER, XREQ, etc. - vous pouvez utiliser UDP, ou plus précisément, Multidiffusion UDP via

"epgm: // hôte: port"

EPGM signifie Encapsulated PGM, c'est-à-dire PGM encapsulé dans UDP, qui est plus compatible avec l'infrastructure de réseau existante que la PGM brute.

Voir aussi http://api.zeromq.org/2-1:zmq-pgm

Cependant, je ne connais aucun support UDP pour les scénarios unicast.

9
Eugene Beresovsky

ZeroMQ dispose d'un support UDP thread-safe à compter de mars 2016:

  • Vous devez utiliser le modèle Radio/Dish (très similaire à Pub/Sub)
  • Pris en charge par libzmq et czmq
  • Voir tests/test_udp.cpp, tests/test_radio_dish.cppdans le code source de libzmq
  • Description complète fournie par Doron Somech sur le fil de discussion zeromq-dev @ list: Fil de sécurité Pub/Sub et Multicast
4
Hitster GTD

J'ai eu le même problème lorsque la version de mes pyzmq et zmq est une version plus ancienne, j'ai mis à niveau la version vers 15.2.0, puis résolu le problème, le préfixe d'adresse ipc que j'ai utilisé est "inproc: //"

os: win7-x64 python: 2.7.6

0
Greling