Tag: 重新连接

ZeroMQ不会自动重新连接

我刚刚在Unbutu Precise(12.04)系统上下载并安装了zeromq-4.0.5。 我编译了用C编写的hello-world 客户端 ( REQ ,connect,127.0.0.1)和服务器 ( REP ,bind)。 我启动服务器。 我启动了客户端。 客户端每秒向服务器发送一条消息,并接收响应。 我按Ctrl- C停止服务器。 客户端尝试发送其下一个传出消息,并且卡在永不返回的epoll系统调用中(如strace所示)。 我重新启动服务器。 即使新服务器已运行一分钟,客户端中的zmq_recv调用仍然卡住。 为客户端取得进展的唯一方法是将其终止(使用Ctrl- C )并重新启动它。 Q1:这是预期的行为吗? 我希望在几秒钟内客户端应该知道服务器再次运行,它会自动重新连接。 Q2:我应该在示例代码中更改哪些内容来解决此问题? 问题3:我使用的是错误版本的软件,还是我的系统坏了? 我已禁用防火墙, sudo iptables -S prints -P INPUT ACCEPT ; -P FORWARD ACCEPT ; -P OUTPUT ACCEPT 。 在strace -f ./hwclient输出中,我可以看到客户端在服务器关闭后每秒尝试connect() 10次​​(默认值为ZMQ_RECONNECT_IVL )。 在strace -f ./hwserver输出中,我可以看到重新启动的服务器accept()的连接。 但是,之后通信会卡住,服务器永远不会收到来自客户端的实际请求(但是当我终止客户端时它会注意到;服务器也会收到服务器重启后启动的其他客户端的请求)。 使用ipc://而不是tcp://会导致相同的行为。 如果在客户端执行下一个zmq_send之前服务器已被zmq_send则在zmq_send中成功发生自动重新连接。 但是,当服务器在客户端运行zmq_recv时被杀死时, zmq_recv无限期地阻塞,而客户端似乎无法从中恢复。 […]