如何正确理解ZeroMQ的ZMQ_RCVHWM选项?

时间:2016-04-09 04:06:12

标签: c++ zeromq

有两个端点,分别是经销商路由器经销商通过TCP协议连接到路由器。我为所有人设置了ZMQ_SNDHWMZMQ_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);

0 个答案:

没有答案