Network programming 对一个套接字使用zmq_recv和zmq_NOBLOCK与zmq_poll

Network programming 对一个套接字使用zmq_recv和zmq_NOBLOCK与zmq_poll,network-programming,zeromq,nonblocking,Network Programming,Zeromq,Nonblocking,从ZeroMQ中的套接字异步获取数据似乎有两种主要方法: if(zmq_recv(&msg, ZMQ_NOBLOCK) == 0) { // could return EAGAIN or others // do stuff } ...and... if(zmq_poll(&pollItems[0], num, timeout)) { if(zmq_poll(&msg) == 0) { // do stuff } } 如果我只

从ZeroMQ中的套接字异步获取数据似乎有两种主要方法:

if(zmq_recv(&msg, ZMQ_NOBLOCK) == 0) { // could return EAGAIN or others
    // do stuff
}

...and...

if(zmq_poll(&pollItems[0], num, timeout)) {
    if(zmq_poll(&msg) == 0) {
        // do stuff
    }
}

如果我只想从一个套接字读取数据,是否有一个令人信服的理由让我选择使用
zmq\u poll
的版本,而不是使用
zmq\u NOBLOCK
zmq\u recv

如果不使用
zmq\u poll

通常你会在一个循环中阅读

while (!done) {
...
  zmq_recv(&msg, ZMQ_NOBLOCK);
... 
}
这是一个繁忙的等待,它不必要地使用CPU
zmq_poll()
阻塞,并且在等待事件发生时不消耗CPU

如果您只有一个套接字,并且不想使用zmq_poll,您通常会使用阻塞
zmq_recv
,并设置zmq_RCVTIMEO,以便在发送端出现问题时不会永远阻塞