Commit e1df1c81 authored by qinjunkun's avatar qinjunkun
Browse files

兼容 hyperf 2.2 版本, 2.2 的 ServiceGovernance\Listener\RegisterServiceListener 和 2.1 的写法发生了差异

parent 158f1a89
Loading
Loading
Loading
Loading
+19 −1
Original line number Original line Diff line number Diff line
@@ -30,7 +30,7 @@ class RegisterServiceListener extends BaseRegisterServiceListener
             */
             */
            $host = isset($server['local_ip']) ? $server['local_ip'] : $server['host'];
            $host = isset($server['local_ip']) ? $server['local_ip'] : $server['host'];
            if (in_array($host, ['0.0.0.0', 'localhost'])) {
            if (in_array($host, ['0.0.0.0', 'localhost'])) {
                $host = $this->getInternalIp();
                $host = $this->getRealInternalIp();
            }
            }
            if (!filter_var($host, FILTER_VALIDATE_IP)) {
            if (!filter_var($host, FILTER_VALIDATE_IP)) {
                throw new \InvalidArgumentException(sprintf('Invalid host %s', $host));
                throw new \InvalidArgumentException(sprintf('Invalid host %s', $host));
@@ -45,4 +45,22 @@ class RegisterServiceListener extends BaseRegisterServiceListener
        return $result;
        return $result;
    }
    }



    protected function getRealInternalIp()
    {
        if (method_exists(self::class, 'getInternalIp')) {
            return $this->getInternalIp();
        }

        $ips = swoole_get_local_ip();
        if (is_array($ips) && ! empty($ips)) {
            return current($ips);
        }
        /** @var mixed|string $ip */
        $ip = gethostbyname(gethostname());
        if (is_string($ip)) {
            return $ip;
        }
        throw new \RuntimeException('Can not get the internal IP.');
    }
}
}
 No newline at end of file