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
해결 방법 : 이것은 "느린 결합 자"상황의 예이며 문서의 http : //zguide.zeromq 2 장에 잘 설명되어 있습니다.org/py : 모든 # 소켓 및 패턴. 특히, 그것은 : "PUB-SUB 소켓에 대해 알아야 할 중요한 점이 하나 있습니다. 구독자가 메시지를 받기 시작하면 정확하게 알지 못합니다. ** 구독자 **를 시작하더라도 잠시 기다려주십시오. 게시자를 시작하면 구독자는 게시자가 보내는 첫 번째 메시지가 항상 누락됩니다 ... " – bzo
더 많은 정보를 얻는 방법을 보여주기 때문에 http://zguide.zeromq.org/php:chapter5를 참조하십시오. 신뢰할 수있는 pub/sub 패턴. – raffian