私のenv:python 2.7、pyzmq-13.1.0-py2.7-win32、windows 7 sp1 x64
- 2 つの ZMQ_ROUTER ソケット、A および B。
- はアドレスにバインドされ、ID が割り当てられます。
- B には ID が割り当てられ、A に接続します。
- B が A にメッセージを送信すると、最初のメッセージは常に失われます
しかし、C# コードの下では何の疑問もありません。何が問題なのですか?
Python コード:
import time
import struct
import zmq
import threading
def relay(contextBind):
backend = contextBind.socket(zmq.ROUTER)
identity = '2'
backend.setsockopt(zmq.IDENTITY, identity )
backend.bind('tcp://*:5678')
poller = zmq.Poller()
poller.register(backend, zmq.POLLIN)
while True:
try:
sockets = dict(poller.poll())
except Exception,ex:
print ex
break
if backend in sockets:
if sockets[backend] == zmq.POLLIN:
msg = backend.recv_multipart()
print msg
if __name__ == '__main__':
#the first message is lost
context = zmq.Context()
relayThread = threading.Thread(target=relay, args=(context,))
relayThread.start()
frontend = context.socket(zmq.ROUTER)
identity = '3'
frontend.setsockopt(zmq.IDENTITY, identity )
try:
frontend.connect('tcp://127.0.0.1:5678')
except zmq.error.ZMQError, ex:
print ex
i = 1
while True:
print 'send ', str(i),'\n'
frontend.send('2', zmq.SNDMORE)
frontend.send(str(i) + ' msg')
i = i + 1
time.sleep(1)