PhpAmqpLib/Connection/AbstractConnection.php
protected function wait_channel($channel_id, $timeout = 0)
    {
        // Keeping the original timeout unchanged.
        $_timeout = $timeout;
        while (true) {
            $now = time();
            try {
                list($frame_type, $frame_channel, $payload) = $this->wait_frame($_timeout);
            } catch (AMQPTimeoutException $e) {
                if ( $this->heartbeat && microtime(true) - ($this->heartbeat*2) > $this->last_frame ) {
                    $this->debug->debug_msg("missed server heartbeat (at threshold * 2)");
                    $this->setIsConnected(false);
                    throw new AMQPHeartbeatMissedException("Missed server heartbeat");
                }

                throw $e;
            }

            $this->last_frame = microtime(true);

            if ($frame_channel === 0 && $frame_type === 8) {
                // skip heartbeat frames and reduce the timeout by the time passed
                $this->debug->debug_msg("received server heartbeat");
                if($_timeout > 0) {
                    $_timeout -= time() - $now;
                    if($_timeout <= 0) {
                        // If timeout has been reached, throw the exception without calling wait_frame
                        throw new AMQPTimeoutException("Timeout waiting on channel");
                    }
                }
                continue;

            } else {

                if ($frame_channel == $channel_id) {
                    return array($frame_type, $payload);
                }

                // Not the channel we were looking for.  Queue this frame
                //for later, when the other channel is looking for frames.
                // Make sure the channel still exists, it could have been
                // closed by a previous Exception.
                if (isset($this->channels[$frame_channel])) {
                    array_push($this->channels[$frame_channel]->frame_queue, array($frame_type, $payload));
                }

                // If we just queued up a method for channel 0 (the Connection
                // itself) it's probably a close method in reaction to some
                // error, so deal with it right away.
                if (($frame_type == 1) && ($frame_channel == 0)) {
                    $this->wait();
                }
            }
        }
    }
protected function wait_channel($channel_id, $timeout = 0)
    {
        // Keeping the original timeout unchanged.
        $_timeout = $timeout;
        while (true) {
            $now = time();
            try {
                list($frame_type, $frame_channel, $payload) = $this->wait_frame($_timeout);
            } catch (AMQPTimeoutException $e) {
                if ( $this->heartbeat && microtime(true) - ($this->heartbeat*2) > $this->last_frame ) {
                    $this->debug->debug_msg("missed server heartbeat (at threshold * 2)");
                    $this->setIsConnected(false);
                    throw new AMQPHeartbeatMissedException("Missed server heartbeat");
                }

                throw $e;
            }

            $this->last_frame = microtime(true);

            if ($frame_channel === 0 && $frame_type === 8) {
                // skip heartbeat frames and reduce the timeout by the time passed
                $this->debug->debug_msg("received server heartbeat");
                if($_timeout > 0) {
                    $_timeout -= time() - $now;
                    if($_timeout <= 0) {
                        // If timeout has been reached, throw the exception without calling wait_frame
                        throw new AMQPTimeoutException("Timeout waiting on channel");
                    }
                }
                continue;

            } else {

                if ($frame_channel == $channel_id) {
                    return array($frame_type, $payload);
                }

                // Not the channel we were looking for.  Queue this frame
                //for later, when the other channel is looking for frames.
                // Make sure the channel still exists, it could have been
                // closed by a previous Exception.
                if (isset($this->channels[$frame_channel])) {
                    array_push($this->channels[$frame_channel]->frame_queue, array($frame_type, $payload));
                }

                // If we just queued up a method for channel 0 (the Connection
                // itself) it's probably a close method in reaction to some
                // error, so deal with it right away.
                if (($frame_type == 1) && ($frame_channel == 0)) {
                    $this->wait();
                }
            }
        }
    }
protected function wait_channel ( $ channel_id , $ timeout = 0 ) { // Keeping the original timeout unchanged. $ _timeout = $ timeout ; while ( true ) { $ now = time ( ) ; try { list ( $ frame_type , $ frame_channel , $ payload ) = $ this -> wait_frame ( $ _timeout ) ; } catch ( AMQPTimeoutException $ e ) { if ( $ this -> heartbeat && microtime ( true ) - ( $ this -> heartbeat * 2 ) > $ this -> last_frame ) { $ this -> debug -> debug_msg ( "missed server heartbeat (at threshold * 2)" ) ; $ this -> setIsConnected ( false ) ; throw new AMQPHeartbeatMissedException ( "Missed server heartbeat" ) ; } throw $ e ; } $ this -> last_frame = microtime ( true ) ; if ( $ frame_channel === 0 && $ frame_type === 8 ) { // skip heartbeat frames and reduce the timeout by the time passed $ this -> debug -> debug_msg ( "received server heartbeat" ) ; if ( $ _timeout > 0 ) { $ _timeout -= time ( ) - $ now ; if ( $ _timeout <= 0 ) { // If timeout has been reached, throw the exception without calling wait_frame throw new AMQPTimeoutException ( "Timeout waiting on channel" ) ; } } continue ; } else { if ( $ frame_channel == $ channel_id ) { return array ( $ frame_type , $ payload ) ; } // Not the channel we were looking for.  Queue this frame //for later, when the other channel is looking for frames. // Make sure the channel still exists, it could have been // closed by a previous Exception. if ( isset ( $ this -> channels [ $ frame_channel ] ) ) { array_push ( $ this -> channels [ $ frame_channel ] -> frame_queue , array ( $ frame_type , $ payload ) ) ; } // If we just queued up a method for channel 0 (the Connection // itself) it's probably a close method in reaction to some // error, so deal with it right away. if ( ( $ frame_type == 1 ) && ( $ frame_channel == 0 ) ) { $ this -> wait ( ) ; } } } }
Waits for a frame from the server destined for a particular channel.

@param string $channel_id
@param int|float|null $timeout
@return array
Waits for a frame from the server destined for a particular channel .