3

我只是在 python 中为一个项目尝试 zeromq。我正在尝试绑定“客户端”并将服务器连接到固定位置。我有一个简单的 REQ/REP 设置,可以在本地正常工作,但似乎在网络上什么也没做。如果我反转绑定,那么这也适用于网络。

相关代码为:

def respond(sock):
    message = sock.recv()
    response = "world"
    sock.send(response)
    print("Received '{0:s}', sent '{1:s}'.".format(message, response) )

def request(sock):
    message = "Hello"
    sock.send(message)
    response = sock.recv()
    print("Sent '{0:s}', recieved '{1:s}'".format(message, response) )

def main():
    opts = get_opts()
    if opts.client:
        sock = CONTEXT.socket(zmq.REQ)
        sock.bind("tcp://*:{0:d}".format(opts.port) )
        request(sock)
    if opts.server:
        sock = CONTEXT.socket(zmq.REP)
        sock.connect("tcp://{0:s}:{1:d}".format(opts.address, opts.port) )
        while True:
            respond(sock)

这里有一个(非)工作示例:https ://gist.github.com/4071783

连接到远程地址时,似乎什么也没有发生。如果我检查 tcpdump,我当然可以看到端口上的活动:

12:20:18.846927 IP server.58387 > client.5555: Flags [.], ack 1, win 3650, options [nop,nop,TS val 718051 ecr 46170252], length 0
12:20:18.847156 IP client.5555 > server.58387: Flags [P.], seq 1:3, ack 1, win 227, options [nop,nop,TS val 46170252 ecr 718051], length 2
12:20:18.847349 IP server.58387 > client.5555: Flags [P.], seq 1:3, ack 1, win 3650, options [nop,nop,TS val 718051 ecr 46170252], length 2
12:20:18.847373 IP client.5555 > server.58387: Flags [.], ack 3, win 227, options [nop,nop,TS val 46170252 ecr 718051], length 0
12:20:18.847553 IP client.5555 > server.58387: Flags [P.], seq 3:16, ack 3, win 227, options [nop,nop,TS val 46170252 ecr 718051], length 13
12:20:18.847645 IP server.58387 > client.5555: Flags [.], ack 3, win 3650, options [nop,nop,TS val 718051 ecr 46170252], length 0
12:20:18.848286 IP server.58387 > client.5555: Flags [.], ack 16, win 3650, options [nop,nop,TS val 718051 ecr 46170252], length 0

但是send()andrecv()仍然被阻塞,好像在等待连接一样。有谁知道这是什么或可以建议如何调试它?

4

1 回答 1

1

你能ping通远程地址吗?0MQ 只是在这个级别使用 TCP,所以如果连接失败,那是因为您尝试连接的地址无法访问。

于 2012-11-21T06:22:54.273 回答