Tag: zeromq

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无限期地阻塞,而客户端似乎无法从中恢复。 […]

可以在ZeroMQ中回复吗?

我正在ZeroMQ中实现Lamport的分布式MUTEX算法 。 算法: 请求流程 1)将其请求推送到自己的队列中(按时间戳排序) 2)向每个节点发送请求。 3)等待来自所有其他节点的回复。 4)如果自己的请求位于其队列的头部并且已收到所有回复,请输入关键部分。 5)退出临界区时,从队列中删除其请求并向每个进程发送一条释放消息。 其他流程 1)收到请求后,将请求推送到自己的请求队列中(按时间戳排序)并回复时间戳。 2)收到释放消息后,从自己的请求队列中删除相应的请求。 我正在考虑用C或Java编写解决方案,但问题的核心似乎是语言中立的。 在我的问题中,我有三种消息类型,让我们称它们为Request , Reply和Release 。 Request / Reply消息很好地适合REQ / REP模式,但Release消息是单向信号,不需要回复。 我可以添加一个额外的PUB / SUB对,但是,根据我的理解,我将无法保证系统中的FIFO传送顺序,因为我最终会有两个并发的TCP连接(这个假设是正确的吗?)。 我可以使用一个基本的非约束fullduplex通道。 另一个答案建议使用DEALER / ROUTER对,但对于这样一个简单的问题来说似乎有些过分。 在文档中,在高级请求 – 回复模式章节中描述了DEALER / ROUTER,我的问题似乎不需要极端的解决方案。 我的问题怎么解决?

编译简单的hello world ZeroMQ C例子,编译标志?

尝试从zeromq教程编译示例hello_world.c:http://zguide.zeromq.org/page:all #Ask-and-Ye-Shall-Receive很确定我已经在OSX Mountain Lion中安装了所有内容。 clang -Wall hwserver.c -o hwserver 给我一个错误: Undefined symbols for architecture x86_64: “_zmq_bind”, referenced from: _main in hwserver-OgrEe6.o “_zmq_ctx_new”, referenced from: _main in hwserver-OgrEe6.o “_zmq_msg_close”, referenced from: _main in hwserver-OgrEe6.o “_zmq_msg_data”, referenced from: _main in hwserver-OgrEe6.o “_zmq_msg_init”, referenced from: _main in hwserver-OgrEe6.o “_zmq_msg_init_size”, referenced from: _main in hwserver-OgrEe6.o “_zmq_msg_recv”, referenced from: _main […]

“服务器”到“服务器”ZeroMQ通信

我想构建一个具有以下架构的系统: +——————+ +——————+ | App1. 0mq client | | App2. 0mq server | +——————+ +——————+ 哪里 App2是一个ZeroMQ服务器,它是一个黑盒子, 和 App1是一个ZeroMQ客户端,但它实际上是一个前端服务器。 前端服务器将处理来自客户端的一些请求,然后将与App2服务器通信。 鉴于: 在任何时间点,任何“服务器”都可以关闭或重新启动。 我想启动任何应用程序,即使其他应用程序没有运行。 如果在App2关闭时启动App1 ,我想知道App2何时启动。 是否可以实现3.仅使用ZeroMQ内置 ,或者我是否需要使用不同的机制来通知App1 App2已启动?