2011-12-13 46 views
13

我是ZERMQ的新手。 ZeroMQ擁有TCP,INPROC和IPC傳輸。我在Winx64和python 2.7中尋找使用python和inproc的例子,這些例子也可以用於linux。如何使用Zeromq的inproc和ipc傳輸?

此外,我一直在尋找UDP傳輸方法,並找不到示例。

我發現的唯一的例子是

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) 

使用情況下,我想的是:UDP像信息的分佈。使用TCP進行測試推/拉操作速度更快,或者處理速度更快。

這裏的測試例子> ..............

服務器:

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

客戶:

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

錯誤消息:

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 

回答

9

據我所知,不支持UDP由0MQ。而且,只有在具有符合POSIX標準的管道實現的操作系統上才支持IPC;所以,在Windows上,你只能使用'inproc',TCP或PGM。但是,除了所有這些之外,0MQ的主要特點之一是您的協議只是地址的一部分。您可以採取任何示例,更改套接字地址,並且所有內容仍然可以正常工作(當然,前提是限制)。另外,ZGuide有很多例子(其中很多例子在Python中可用)。

+0

請參閱編輯....添加示例...的錯誤消息。 – Merlin

+0

@美林:這些是分開的過程嗎?因爲'inproc'只適合作爲線程場景的替代品。 – pblasucci

+0

尋找例子來測試....在Python中,你可以指向任何 – Merlin

8

如果(​​)使用ZMQ_PUB或ZMQ_SUB插座 - 你不要在你使用路由器XREQ,等你給的例子,做的 - 你可以使用UDP,或者更準確地說,UDP組播通過

「epgm://主機:端口」

ePGM代表Encapsulated PGM,即PGM封裝在UDP,這是一種比原PGM現有網絡基礎設施的兼容性更好。

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

見我不知道單播情況下任何UDP支持,雖然。

0

我有,當我pyzmq的和ZMQ的版本是舊版本同樣的問題,我的版本升級到15.2.0,則解決了這個問題,我使用了IPC地址前綴是「INPROC://」

os:win7-x64 python:2.7。6

3

ZeroMQ具有線程安全的UDP支持,2016年3月的:

  • 你必須使用無線電/皿模式(非常類似於發佈/訂閱)
  • 支持在libzmq和czmq
  • tests/test_udp.cpptests/test_radio_dish.cpp在libzmq源代碼
  • 由多倫Somech上zeromq-dev的providided @列表線程的詳細說明:Thread safe Pub/Sub and Multicast
+0

郵件列表的鏈接已損壞,請轉到[here](http://lists.zeromq.org/pipermail/zeromq-dev/2016-March/030032.html),而不是 – gbs

+0

@gbs謝謝!我已更新鏈接。 –