2011-12-13 7 views
13

Jestem nowicjuszem w ZERMQ. ZeroMQ ma transporty TCP, INPROC i IPC. Szukam przykładów przy użyciu Pythona i inproc w Winx64 i Pythonie 2.7, które mogą być również używane dla Linux.Jak korzystać z transportów inproc i ipc Zeromqa?

Również szukałem metod transportu UDP i nie mogę znaleźć przykładów.

Jedyny przykład znalazłem jest

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) 

Sprawa użycie myślę o to: jak UDP dystrybucji informacji. Testowanie Push/Pull przy użyciu TCP jest szybsze lub może być uruchomione szybciej.

Oto przykład testy> ..............

Serwer:

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") 

Klient:

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, "]" 

błąd Msg:

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 

Odpowiedz

9

Zgodnie z moją wiedzą, protokół UDP nie jest obsługiwany o 0MQ. Ponadto protokół IPC jest obsługiwany tylko w systemach operacyjnych, które mają implementację nazwanych potoków zgodną z POSIX; tak więc w systemie Windows naprawdę można używać tylko "inproc", TCP lub PGM. Jednak poza tym wszystkim, jedną z głównych funkcji 0MQ jest to, że twój protokół jest tylko częścią adresu. Możesz wziąć dowolny przykład, zmienić adres gniazda, a wszystko powinno nadal działać dobrze (oczywiście z zastrzeżeniem wyżej wymienionych ograniczeń). Ponadto, ZGuide ma wiele przykładów (znaczna ich liczba jest dostępna w Python).

+0

Proszę zobaczyć zmiany .... dodany przykład ... błędów błędów. – Merlin

+0

@Merlin: czy są one w oddzielnym procesie? ponieważ "inproc" nadaje się tylko jako zamiennik dla scenariuszy wątków. – pblasucci

+0

szuka na przykład do przetestowania .... w Pythonie, czy możesz wskazać dowolny – Merlin

8

Jeśli (and only if) użyć ZMQ_PUB lub gniazd ZMQ_SUB - czego nie robić w których używasz router, XREQ itp przykładach dałeś, - można używać UDP lub bardziej precyzyjnie, UDP multicast poprzez

"epgm: // host: port"

ePGM podpórek Encapsulated PGM, tj PGM zamknięty w UDP, który jest bardziej kompatybilny z istniejącą infrastrukturą sieciową niż surowe PGM.

Zobacz także http://api.zeromq.org/2-1:zmq-pgm

nie wiem jakiegokolwiek wsparcia dla scenariuszy unicast UDP chociaż.

0

miałem ten sam problem, gdy moi pyzmq oraz wersji zmq jest starsza wersja, uaktualnić do wersji 15.2.0, a następnie rozwiązać problem, IPC adres prefiks, że kiedyś to „InProc: //”

os: win7-x64 python: 2.7.6

3

ZeroMQ ma wątek bezpieczne wsparcie UDP od marca 2016:

  • Musisz użyć/płytkę wzór Radio (bardzo podobny do Pub/Sub)
  • obsługiwana w libzmq i czmq
  • Zobacz tests/test_udp.cpp, tests/test_radio_dish.cpp w kodzie źródłowym libzmq
  • Pełny rozkład providided przez Doron Somech na zeromq-dev @ list wątek: Thread safe Pub/Sub and Multicast
+0

Link do listy mailingowej jest uszkodzony, przejdź [tutaj] (http://lists.zeromq.org/pipermail/zeromq-dev/2016-March/030032.html) zamiast tego – gbs

+0

@gbs thanks! Zaktualizowałem link. –

Powiązane problemy