有两个端点,分别是经销商和路由器。 经销商通过TCP协议连接到路由器。我为所有人设置了ZMQ_SNDHWM
和ZMQ_RCVHWM
到只有一个。
注意经销商总是向路由器发送消息,但路由器不进行任何接收操作。
当我只启动经销商时,经销商只发出一条消息。这是预期的。 但是当我在那之后启动路由器时,经销商可能会意外地发送大约4千条消息。
为什么ZMQ_RCVHWM
选项似乎无效?
经销商代码:
// create ctx
void* ctx = zmq_ctx_new();
assert(nullptr != ctx);
// create in
void* in = zmq_socket(ctx, ZMQ_DEALER);
assert(in);
int sndhwm = 1;
assert(0 == zmq_setsockopt(in, ZMQ_SNDHWM, &sndhwm, sizeof(sndhwm)));
assert(0 == zmq_setsockopt(in, ZMQ_RCVHWM, &sndhwm, sizeof(sndhwm)));
int rc = zmq_connect(in, "tcp://127.0.0.1:1012");
assert(!rc);
char content[100] = {0};
int size = 0;
int64_t nCount = 0;
while(1)
{
sprintf_s(content, "%d", ++nCount);
size = strlen(content);
rc = zmq_send(in, content, size, 0);
assert(rc = size);
printf("in = %d\n", nCount);
}
路由器的代码:
// create ctx
void* ctx = zmq_ctx_new();
void* out = zmq_socket(ctx, ZMQ_ROUTER);
int sndhwm = 1;
assert(0 == zmq_setsockopt(out, ZMQ_SNDHWM, &sndhwm, sizeof(sndhwm)));
assert(0 == zmq_setsockopt(out, ZMQ_RCVHWM, &sndhwm, sizeof(sndhwm)));
int rc = zmq_bind(out, "tcp://127.0.0.1:1012");
assert(!rc);