protected function driverMatcher(/*# string */ $tag)/*# : array */
    {
        $matched = [];
        foreach ($this->drivers as $id => $driver) {
            // disconnected or tag not match
            if (!$driver->ping() ||
                '' !== $tag &&
                (
                    !$driver instanceof TaggableInterface ||
                    !$driver->hasTag($tag)
                )
            ) {
                continue;
            }

            // weight factor
            $f = $this->factors[$id];
            for ($i = 0; $i < $f; ++$i) {
                $matched[] = $id;
            }
        }
        return $matched;
    }