1

zeromq を初めて使用し、基本的な pub/sub を機能させようとしています。以下を実行すると (パブの前に開始するサブ)、パブリッシャーは終了しますが、サブスクライバーはすべてのメッセージを受信せずにハングします - なぜですか?

ソケットは閉じられていると思いますが、メッセージは送信されましたか? すべてのメッセージを確実に受信する方法はありますか?

出版社:

import zmq
import random
import time
import tnetstring

context=zmq.Context()
socket=context.socket(zmq.PUB)
socket.bind("tcp://*:5556")

y=0
for x in xrange(5000):
    st = random.randrange(1,10) 
    data = []
    data.append(random.randrange(1,100000))
    data.append(int(time.time()))
    data.append(random.uniform(1.0,10.0))

    s = tnetstring.dumps(data)
    print 'Sending ...%d %s' % (st,s)

    socket.send("%d %s" % (st,s))
    print "Messages sent: %d" % x
    y+=1

print '*** SERVER FINISHED. # MESSAGES SENT = ' + str(y)

加入者 :-

import sys
import zmq
import tnetstring

# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)

socket.connect("tcp://localhost:5556")
filter = "" # get all messages

socket.setsockopt(zmq.SUBSCRIBE, filter)

x=0
while True:
    topic,data = socket.recv().split()
    print "Topic: %s, Data = %s. Total # Messages = %d" % (topic,data,x)
    x+=1
4

2 に答える 2

0

ZeroMQ では、クライアントとサーバーは常に再接続を試みます。反対側が切断されても、それらはダウンしません (多くの場合、反対側が再びアップした場合に通話を再開する必要があるため)。したがって、テストコードでは、recv()ある時点でメッセージを停止しない限り、クライアントはサーバーがメッセージの送信を再開するまで待機します。

于 2013-05-20T09:40:25.147 に答える