0MQ messaging ZMQPoll::poll

(PECL zmq >= 0.5.0)

ZMQPoll::poll — 항목 투표


설명

public ZMQPoll::poll(array &$readable, array &$writable, int $timeout = -1): int

현재 폴 세트의 항목을 폴링합니다. 읽기 및 쓰기 가능한 항목은 readablewritable 매개변수로 반환됩니다. ZMQPoll::getLastErrors()를 사용하여 오류가 있는지 확인할 수 있습니다.


매개변수

readable
읽을 수 있는 ZMQSockets/PHP 스트림이 반환되는 배열입니다. 작업 시작 시 어레이가 지워집니다.
writable
쓰기 가능한 ZMQSockets/PHP 스트림이 반환되는 배열입니다. 작업 시작 시 어레이가 지워집니다.
timeout
작업 시간이 초과되었습니다. -1은 적어도 하나의 항목에 활동이 있을 때까지 폴링이 대기함을 의미합니다. 버전 1.0.0부터 폴 타임아웃은 마이크로초가 아닌 밀리초로 정의됩니다.

반환 값

활동이 있는 항목의 양을 나타내는 정수를 반환합니다.


오류/예외

오류가 발생하면 ZMQPollException을 던집니다.


Examples

예제 #1 ZMQPoll() 예제

간단한 폴 서버 만들기

                  
<?php
/* Create socket, request-reply pattern (reply socket) */
$context = new ZMQContext();
$server  = $context->getSocket(ZMQ::SOCKET_REP);

/* Bind to port 5555 on 127.0.0.1 */
$server->bind("tcp://127.0.0.1:5555");

/* Create new pollset for incoming/outgoing message */
$poll = new ZMQPoll();

/* Add the object and listen for poll in/out */
$id = $poll->add($server, ZMQ::POLL_IN | ZMQ::POLL_OUT);
echo "Added object with id " . $id . "\n";

/* Initialise readable and writable arrays */
$readable = array();
$writable = array();

while (true) {
   /* Amount of events retrieved */
   $events = 0;

   try {
       /* Poll until there is something to do */
       $events = $poll->poll($readable, $writable, -1);
       $errors = $poll->getLastErrors();

       if (count($errors) > 0) {
           foreach ($errors as $error) {
               echo "Error polling object " . $error . "\n";
           }
       }
   } catch (ZMQPollException $e) {
       echo "poll failed: " . $e->getMessage() . "\n";
   }

   if ($events > 0) {
       /* Loop through readable objects and recv messages */
       foreach ($readable as $r) {
           try {
               echo "Received message: " . $r->recv() . "\n";
           } catch (ZMQException $e) {
               echo "recv failed: " . $e->getMessage() . "\n";
           }
       }

       /* Loop through writable and send back messages */
       foreach ($writable as $w) {
           try {
               $w->send("Got it!");
           } catch (ZMQException $e) {
               echo "send failed: " . $e->getMessage() . "\n";
           }
       }
   }
}
?>