PHPPM\ProcessManager::getNextSlave PHP Method

getNextSlave() protected method

Returns the next free slave. This method is async, so be aware of async calls between this call.
protected getNextSlave ( $cb ) : integer
return integer
    protected function getNextSlave($cb)
    {
        $that = $this;
        $checkSlave = function () use($cb, $that, &$checkSlave) {
            $minConnections = null;
            $minPort = null;
            foreach ($this->slaves as $slave) {
                if (!$slave['ready']) {
                    continue;
                }
                if (!$this->concurrentRequestsPerWorker && $slave['busy']) {
                    //we skip workers that are busy, means worker that are currently handle a connection
                    //this makes it more robust since most applications are not made to handle
                    //several request at the same time - even when one request is streaming. Would lead
                    //to strange effects&crashes in high traffic sites if not considered.
                    //maybe in the future this can be set application specific.
                    //Rule of thumb: The application may not operate on globals, statics or same file paths to get this working.
                    continue;
                }
                // we pick a slave that currently handles the fewest connections
                if (null === $minConnections || $slave['connections'] < $minConnections) {
                    $minConnections = $slave['connections'];
                    $minPort = $slave['port'];
                }
            }
            if (null !== $minPort) {
                $this->handledRequests++;
                $cb($minPort);
                return;
            }
            $this->loop->futureTick($checkSlave);
        };
        $checkSlave();
    }