2011-12-13 21 views
13

Im a newbie to ZERMQ. ZeroMQ có giao thức TCP, INPROC và IPC. Tôi đang tìm các ví dụ sử dụng python và inproc trong Winx64 và python 2.7, cũng có thể được sử dụng cho Linux.Làm thế nào để sử dụng vận chuyển inproc và ipc của Zeromq?

Ngoài ra, tôi đã tìm kiếm các phương thức vận tải UDP và các ví dụ không thể tìm thấy.

Ví dụ duy nhất tôi thấy là

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) 

Các trường hợp sử dụng Tôi đang suy nghĩ về là: UDP như phân phối thông tin. Kiểm tra Push/Pull bằng TCP nhanh hơn hoặc inproc nhanh hơn.

Dưới đây là bài kiểm tra ví dụ> ..............

Server:

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

Chủ đầu tư:

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

Lỗi 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 

Trả lời

9

Theo hiểu biết tốt nhất của tôi, UDP không được hỗ trợ vào 0MQ. Ngoài ra, IPC chỉ được hỗ trợ trên các hệ điều hành có triển khai tuân thủ POSIX của các đường ống được đặt tên; vì vậy, trên Windows, bạn thực sự chỉ có thể sử dụng 'inproc', TCP hoặc PGM. Tuy nhiên, trên và vượt ra ngoài tất cả điều này, một trong những tính năng chính của 0MQ là giao thức của bạn chỉ là một phần của địa chỉ. Bạn có thể lấy bất kỳ ví dụ nào, thay đổi địa chỉ socket và mọi thứ vẫn hoạt động tốt (chủ đề, tất nhiên, đối với các hạn chế đã đề cập ở trên). Ngoài ra, các ZGuide có nhiều ví dụ (một số tốt trong đó có sẵn trong Python).

+0

Vui lòng xem các chỉnh sửa .... ví dụ được thêm ... của thông báo lỗi. – Merlin

+0

@Merlin: đây có phải là những quy trình riêng biệt không? vì 'inproc' chỉ thích hợp để thay thế cho các tình huống luồng. – pblasucci

+0

tìm kiếm ví dụ để kiểm tra .... trong python, bạn có thể trỏ đến bất kỳ – Merlin

8

Nếu (and only if) bạn sử dụng ZMQ_PUB hoặc ổ cắm ZMQ_SUB - mà bạn không làm trong các ví dụ bạn đưa ra, nơi bạn sử dụng ROUTER, XREQ, vv - bạn có thể sử dụng UDP, hay chính xác hơn, UDP multicast qua

"epgm: // host: port"

EPGM là viết tắt của Encapsulated PGM, tức là PGM gói gọn trong UDP, đó là tương thích hơn với cơ sở hạ tầng mạng hiện tại hơn liệu PGM.

cũng http://api.zeromq.org/2-1:zmq-pgm

Xem Tôi không biết về bất kỳ hỗ trợ UDP cho các kịch bản unicast mặc dù.

0

tôi đã có vấn đề tương tự khi của pyzmq tôi và phiên bản zmq là phiên bản cũ, tôi nâng cấp phiên bản để 15.2.0, sau đó giải quyết được vấn đề, địa chỉ prefix ipc mà tôi sử dụng là "InProc: //"

os: win7-x64 python: 2.7.6

3

ZeroMQ đã hỗ trợ UDP thread-an toàn như của tháng 3 năm 2016:

  • Bạn phải sử dụng Radio/Dish mẫu (rất giống với Pub/Sub)
  • được hỗ trợ trong libzmq và czmq
  • Xem tests/test_udp.cpp, tests/test_radio_dish.cpp trong mã nguồn libzmq
  • Full cố providided bởi Doron Somech trên zeromq-dev @ danh sách chủ đề: Thread safe Pub/Sub and Multicast
+0

Liên kết đến danh sách gửi thư bị hỏng, truy cập [tại đây] (http://lists.zeromq.org/pipermail/zeromq-dev/2016-March/030032.html) thay vì – gbs

+0

@gbs cảm ơn! Tôi đã cập nhật liên kết. –

Các vấn đề liên quan