¿Cómo actúa zmq poller?


Estoy confundido en cuanto a lo que poller realmente hace en zmq. La zguide entra en ella mínimamente, y solo la describe como una forma de leer desde múltiples sockets. Esta no es una respuesta satisfactoria para mí porque no explica cómo tener sockets de tiempo de espera. Sé zeromq: cómo evitar la espera infinita? explica para los patrones push/pull, pero no req/rep, que es lo que quiero saber cómo usar.

Lo que intento preguntar es: Cómo funciona el encuestador y cómo se aplica su función para hacer un seguimiento de los sockets y sus solicitudes?

Author: Community, 2013-08-08

1 answers

Cuando necesite escuchar en diferentes sockets en el mismo hilo, use un poller:

ZMQ.Socket subscriber = ctx.socket(ZMQ.SUB)
ZMQ.Socket puller = ctx.socket(ZMQ.PULL)

Registrar sockets con poller (POLLIN escucha los mensajes entrantes)

ZMQ.Poller poller = ZMQ.Poller(2)
poller.register(subscriber, ZMQ.Poller.POLLIN)
poller.register(puller, ZMQ.Poller.POLLIN)

Al sondear, use un bucle:

while( notInterrupted()){
  poller.poll()

  //subscriber registered at index '0'
  if( poller.pollin(0)) 
     subscriber.recv(ZMQ.DONTWAIT)

  //puller registered at index '1'
  if( poller.pollin(1))
     puller.recv( ZMQ.DONTWAIT)
}

Elija cómo desea realizar la encuesta...

poller.poll() bloquea hasta que hay datos en cualquiera de los sockets.
poller.poll(1000) bloques para 1s, luego tiempos fuera.

El encuestador notifica cuando hay datos (mensajes) disponibles en los sockets; es su trabajo leer se.

Al leer, hazlo sin bloquear: socket.recv( ZMQ.DONTWAIT). A pesar de que poller.pollin(0) comprueba si hay datos para leer, desea evitar cualquier llamada de bloqueo dentro del bucle de sondeo, de lo contrario, podría terminar bloqueando el encuestador debido a un socket 'atascado'.

Por lo tanto, si se envían dos mensajes separados a subscriber, debe invocar subscriber.recv() dos veces para borrar el encuestador, de lo contrario, si llama a subscriber.recv() una vez, el encuestador seguirá diciéndole que hay otro mensaje para leer. Así que, en esencia, el el encuestador rastrea la disponibilidad y el número de mensajes, no los mensajes reales.

Deberías revisar los ejemplos de encuestas y jugar con el código, es la mejor manera de aprender.

¿Responde eso a tu pregunta?

 54
Author: raffian,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-01-27 18:04:52