-1) { $class = \Yurun\Util\YurunHttp\Handler\Swoole::class; } else { $class = \Yurun\Util\YurunHttp\Handler\Curl::class; } return new $class(); } /** * 发送请求并获取结果. * * @param \Yurun\Util\YurunHttp\Http\Request $request * @param \Yurun\Util\YurunHttp\Handler\IHandler|string|null $handlerClass * * @return \Yurun\Util\YurunHttp\Http\Response|null */ public static function send($request, $handlerClass = null) { if ($handlerClass instanceof IHandler) { $handler = $handlerClass; $needClose = false; } else { $needClose = true; if (null === $handlerClass) { $handler = static::getHandler(); } else { $handler = new $handlerClass(); } } /** @var IHandler $handler */ $time = microtime(true); foreach (static::$attributes as $name => $value) { if (null === $request->getAttribute($name)) { $request = $request->withAttribute($name, $value); } } $handler->send($request); $response = $handler->recv(); if (!$response) { return $response; } $response = $response->withTotalTime(microtime(true) - $time); if ($needClose) { $handler->close(); } return $response; } /** * 发起 WebSocket 连接. * * @param \Yurun\Util\YurunHttp\Http\Request $request * @param \Yurun\Util\YurunHttp\Handler\IHandler|string $handlerClass * * @return \Yurun\Util\YurunHttp\WebSocket\IWebSocketClient */ public static function websocket($request, $handlerClass = null) { if ($handlerClass instanceof IHandler) { $handler = $handlerClass; } elseif (null === $handlerClass) { $handler = static::getHandler(); } else { $handler = new $handlerClass(); } foreach (static::$attributes as $name => $value) { if (null === $request->getAttribute($name)) { $request = $request->withAttribute($name, $value); } } return $handler->websocket($request); } /** * 获取所有全局属性. * * @return array */ public static function getAttributes() { return static::$attributes; } /** * 获取全局属性值 * * @param string $name * @param mixed $default * * @return mixed */ public static function getAttribute($name, $default = null) { if (\array_key_exists($name, static::$attributes)) { return static::$attributes[$name]; } else { return $default; } } /** * 设置全局属性值 * * @param string $name * @param mixed $value * * @return mixed */ public static function setAttribute($name, $value) { static::$attributes[$name] = $value; } }