2012-05-15 30 views
0

我正嘗試使用eventlet和zeromq PUSH/PULL套接字創建偵聽器/發送器對。Zeromq PUSH/PULL不能按預期工作的Eventlet

這是代碼:

import eventlet 
from eventlet.green import zmq 
from eventlet import sleep as gsleep 

#=============================================================================== 
# config 
#=============================================================================== 
ctx = zmq.Context() 
adr = 'tcp://127.0.0.1:5558' 

#=============================================================================== 
# listener 
#=============================================================================== 
def listen(addr): 
    l = ctx.socket(zmq.PULL) 
    l.connect(addr) 
    print 'listening on %s' % addr 
    while True: 
     data = l.recv() 
     print 'something received : %s' % data 

eventlet.spawn_n(listen, adr) 

#=============================================================================== 
# sender 
#=============================================================================== 
s = ctx.socket(zmq.PUSH) 
s.connect(adr) 
while True: 
    gsleep(1) 
    print "sending something" 
    s.send('blabla') 

我得到的輸出:

listening on tcp://127.0.0.1:5558 
sending something 
sending something 
sending something 
sending something 
sending something 
sending something 
... 

,而不是預期:

listening on tcp://127.0.0.1:5558 
sending something 
something received : blabla 
sending something 
something received : blabla 
sending something 
something received : blabla 
... 

我缺少什麼?

回答

1

您應該使用綁定,而不是連接發件人插座,這樣的:

s.connect(adr) 

應改爲:

s.bind(adr)