0MQ 事件驱动 以及 poller
底层IO事件,以及借用socket poller的上层0MQ socket事件。 先来看用于底层和上层的两种poller。 这是用于底层io事件的poller_t,每个socket_base_t都关联到一个poller_t,这个poller_t运行在io_thread_t线程上。 这是运行在0MQ socket层的事件poller。运行在你的控制线程,也就是你编程的线程。 每次你使用zmq_poller_poll都会创建一个sokcet_poller_t去进行poll。 我们要去轮询一个0MQ socket层事件,我们会通过zmq_poll将socket_base_t添加到poller而不是底层fd。 item_t的第二个成员是pollfd,在这里设置为0,表示并不使用fd进行poll。 下面再看socket_poller_t::wait 注释写得很清楚,并不是在poll底层的fd,在poll返回后,遍历所有socket_base_t,并getsocket去取ZMQ_EVENTS事件。zmq_poll被唤醒一般是0MQ socket通过signaler_t去发送唤醒信号。 再来看socket_poller_t::rebuild(), 这是每次socket_poller_t::wait()之初都调用的。 其中它为我们需要进行zmq_poll的socket_base