18

ZERMQの初心者です。ZeroMQには、TCP、INPROC、およびIPCトランスポートがあります。Winx64とpython2.7でpythonとinprocを使用した例を探しています。これは、Linuxでも使用できます。

また、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を使用したプッシュ/プルのテストは高速であるか、inprocの方が高速です。

これがテスト例です>.............。

サーバ:

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
4

4 に答える 4

14

私の知る限りでは、UDP は 0MQ ではサポートされていません。また、IPC は、名前付きパイプの POSIX 準拠の実装を持つ OS でのみサポートされます。そのため、Windows では、実際には「inproc」、TCP、または PGM しか使用できません。ただし、これらすべてに加えて、0MQ の主な機能の 1 つは、プロトコルがアドレスの一部にすぎないことです。任意の例を挙げて、ソケット アドレスを変更しても、すべてが正常に機能するはずです (もちろん、前述の制限が適用されます)。また、ZGuideには多くの例があります (かなりの数がPythonで利用可能です)。

于 2011-12-13T16:27:32.987 に答える
9

ZMQ_PUB または ZMQ_SUB ソケットを使用する場合 (およびその場合のみ) - ROUTER、XREQ などを使用する例では使用しません - UDP、またはより正確には、UDP マルチキャストを使用できます

「epgm://ホスト:ポート」

EPGM は の略ですEncapsulated PGM。つまり、UDP にカプセル化されたPGMであり、生の PGM よりも既存のネットワーク インフラストラクチャとの互換性が高くなります。

http://api.zeromq.org/2-1:zmq-pgmも参照してください。

ただし、ユニキャスト シナリオの UDP サポートについては知りません。

于 2012-07-05T06:16:44.140 に答える
5

2016 年 3 月の時点で、ZeroMQ はスレッドセーフな UDP をサポートしています。

  • Radio/Dish パターンを使用する必要があります (Pub/Sub に非常に似ています)。
  • libzmq および czmq でサポート
  • libzmq ソース コードのを参照してくださいtests/test_udp.cpptests/test_radio_dish.cpp
  • zeromq-dev@ リスト スレッドに関する Doron Somech による完全な内訳:スレッド セーフな Pub/Sub およびマルチキャスト
于 2016-04-11T19:44:22.670 に答える