- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的一个应用程序中,我使用 DEALER/ROUTER inproc 连接。我将 DEALER 套接字上的 linger 选项设置为 0,以便一旦 ROUTER 套接字关闭,在 DEALER 套接字上发送的所有消息都将被丢弃。虽然这对于 TCP 连接来说效果很好,但是对于 inproc 来说它会阻塞。这是一个最小的工作示例:
#include <zmq.h>
#include <windows.h>
int main()
{
void *context = zmq_ctx_new();
void *router = zmq_socket(context, ZMQ_ROUTER);
zmq_bind(router, "inproc://socket");
void *dealer = zmq_socket(context, ZMQ_DEALER);
zmq_connect(dealer, "inproc://socket");
int linger = 0;
zmq_setsockopt(dealer, ZMQ_LINGER, &linger, sizeof(linger));
zmq_close(router);
// sleep for 1 ms
Sleep(1);
// this call blocks
zmq_send(dealer, "message", 7, 0);
zmq_close(dealer);
zmq_ctx_destroy(context);
return 0;
}
在关闭 DEALER 套接字之前,zmq_send() 调用会阻塞。在这个最小的示例中,我必须添加一个 Sleep(1) 调用。当省略此调用时,zmq_send() 不会阻塞。阻塞时,调用栈如下:
[External Code]
libzmq.dll!zmq::signaler_t::wait(int timeout_) Line 253 C++
libzmq.dll!zmq::mailbox_t::recv(zmq::command_t * cmd_, int timeout_) Line 80 C++
libzmq.dll!zmq::socket_base_t::process_commands(int timeout_, bool throttle_) Line 1023 C++
libzmq.dll!zmq::socket_base_t::send(zmq::msg_t * msg_, int flags_) Line 869 C++
libzmq.dll!s_sendmsg(zmq::socket_base_t * s_, zmq_msg_t * msg_, int flags_) Line 346 C++
libzmq.dll!zmq_send(void * s_, const void * buf_, unsigned __int64 len_, int flags_) Line 371 C++
我使用的是 Windows 10 x64、libzmq 4.2.1(也使用 4.1.6 进行了测试)和 Visual Studio 2015。如何彻底关闭 DEALER/ROUTER 连接?这是 libzmq 中的错误吗?
最佳答案
使用 ZMQ_DONTWAIT 是否可行?在你的
zmq_send()
调用并评估错误代码?
将代码更改为
// this call blocks no more
zmq_send(dealer, "message", 7, ZMQ_DONTWAIT);
int ec = zmq_errno();
printf("code: %d\nstring: %s\n", ec, zmq_strerror(ec));
会导致
code: 11
string: Resource temporarily unavailable
或者,可以 socket monitor用于检测关闭事件并阻止进一步发送?这确实取决于您的架构。
关于sockets - 如何彻底关闭 Zeromq DEALER/ROUTER inproc 连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42157989/
我的公司正在研究使用 ZeroMQ 作为传输机制。首先,我对性能进行了基准测试,只是为了了解我在玩什么。 所以我创建了一个应用程序,将 zmq 经销商到经销商的设置与 winsock 进行比较。我测量
我将 ZEROMQ 用于分布式消息传递应用程序。需要将客户端(DEALER 套接字)连接到多个服务器(服务器端的 ROUTER 套接字)。我在客户方面有哪些选择? 在客户端为每个服务器端点(ROUTE
一个服务器 - ZMQ_ROUTER,多个客户端 - ZMQ_DEALER 服务器(ZMQ_ROUTER)如何向所有客户端(ZMQ_DEALER)发送消息? 更新:我知道有 PUB-SUB 模式,这正
一个服务器 - ZMQ_ROUTER,多个客户端 - ZMQ_DEALER 服务器(ZMQ_ROUTER)如何向所有客户端(ZMQ_DEALER)发送消息? 更新:我知道有 PUB-SUB 模式,这正
我有一个 zmq 经销商套接字,我正在连接到我机器上没有其他人连接到的端口。我使用 ZMQ_IMMEDIATE 选项来阻止套接字在没有连接的对等方的情况下发送消息。如果我尝试发送消息的次数足够多(大约
我在 ZMQ 中设置了一个 REP/DEALER 连接,发现当 REP 向 DEALER 发送一条 msg 时,后者必须 recv 两次才能获得该消息。 这是为什么? 复制此代码的代码是代码 from
我正在使用 ZMQ 模式经销商/路由器。 在我的项目中,路由器是代理经理,经销商是代理。 所以我有很多经销商,只有一个路由器。 每个经销商可以向路由器发送自己的请求并等待回复。 路由器监听一个端口,因
谁能告诉我zmq.sockets的类型是什么? 在什么情况下可以使用这些 socket ? 我需要的主要区别是python zeroMQ中的 zmq.DEALER 和 zmq.ROUTER ? 哪种类
我正在使用 pyzmq 从 DEALER 向 ROUTER 发送 20000 条消息>. 当我在每条消息之间暂停 0.0001 秒时,它们都会到达,但如果我通过每条消息暂停 0.00001 来将它们发
我需要执行以下操作: 连接到SAME远程端口的多个客户端 每个客户端打开2个不同的套接字,一个是 PUB/SUB , 另一个是 ROUTER/DEALER (服务器偶尔可以向客户端发送心跳,不同的服务
我想知道是否有办法让 ZeroMQ 套接字只进行读取或只进行写入。因为,在我看来,即使有异步/多线程示例,每个线程仍然使用 receive-then-send 循环。我遇到的问题是,我想要从 Zero
我正在尝试构建 Paranoid Pirate Pattern 的后半部分,一个将工作发送到一组 DEALER Node 的 ROUTER(我可能误解了该图)。现在我只希望经销商回应工作或只是发回一条
在我的一个应用程序中,我使用 DEALER/ROUTER inproc 连接。我将 DEALER 套接字上的 linger 选项设置为 0,以便一旦 ROUTER 套接字关闭,在 DEALER 套接字
尝试使用 0MQ ROUTER DEALER 范例在多个客户端和服务之间进行通信并完成工作。 客户端、代理和服务器在各自的 Docker 容器中运行如果我将客户端、代理、工作程序作为独立的 Java
我有一个连接到 ROUTER 套接字的 DEALER 套接字,但是,ROUTER 套接字有时可能会取消绑定(bind)并重新绑定(bind)到同一端口(由于应用程序关闭并重新启动绑定(bind)套接字
首先是我的代码(很大程度上受到 ZMQ 文档 http://zguide.zeromq.org/py:mtserver 的启发): import zmq import time import sys
我一直在学习 zmq 最近, 有人可以向我介绍一下 PUSH/PULL 之间的区别吗? 和 DEALER/ROUTER 模式 zmq 以及 什么时候应该使用哪种模式? 最佳答案 这里是the link
我把这个最小的例子放在一起,以便将消息从路由器套接字发送到特定的 DEALER socker(它有它的身份集)。当运行这两个程序时,它似乎卡在 ROUTER 上等待来自 DEALER 的回复,而 DE
我是一名优秀的程序员,十分优秀!