改名
This commit is contained in:
@@ -7,7 +7,7 @@
|
||||
*/
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace HttpServer\Client\Help;
|
||||
namespace HttpServer\Client;
|
||||
|
||||
use Exception;
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace HttpServer\Client\Help;
|
||||
namespace HttpServer\Client;
|
||||
|
||||
|
||||
use Closure;
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace HttpServer\Client\Help;
|
||||
namespace HttpServer\Client;
|
||||
|
||||
|
||||
use CurlHandle;
|
||||
use Exception;
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
|
||||
@@ -35,10 +36,10 @@ class Curl extends ClientAbstracts
|
||||
* @param $path
|
||||
* @param $method
|
||||
* @param $params
|
||||
* @return mixed
|
||||
* @return CurlHandle
|
||||
* @throws Exception
|
||||
*/
|
||||
private function getCurlHandler($path, $method, $params): mixed
|
||||
private function getCurlHandler($path, $method, $params): CurlHandle
|
||||
{
|
||||
[$host, $isHttps, $path] = $this->matchHost($path);
|
||||
|
||||
@@ -68,10 +69,10 @@ class Curl extends ClientAbstracts
|
||||
|
||||
/**
|
||||
* @param $resource
|
||||
* @return bool
|
||||
* @return void
|
||||
* @throws Exception
|
||||
*/
|
||||
private function curlHandlerSslSet($resource): mixed
|
||||
private function curlHandlerSslSet($resource): void
|
||||
{
|
||||
if (!empty($this->ssl_key)) {
|
||||
if (!file_exists($this->ssl_key)) {
|
||||
@@ -85,7 +86,6 @@ class Curl extends ClientAbstracts
|
||||
}
|
||||
curl_setopt($resource, CURLOPT_SSLCERT, $this->getSslCertFile());
|
||||
}
|
||||
return $resource;
|
||||
}
|
||||
|
||||
|
||||
@@ -93,10 +93,10 @@ class Curl extends ClientAbstracts
|
||||
* @param $resource
|
||||
* @param $path
|
||||
* @param $method
|
||||
* @return resource
|
||||
* @return CurlHandle
|
||||
* @throws Exception
|
||||
*/
|
||||
private function do($resource, $path, $method)
|
||||
private function do($resource, $path, $method): CurlHandle
|
||||
{
|
||||
curl_setopt($resource, CURLOPT_URL, $path);
|
||||
curl_setopt($resource, CURLOPT_TIMEOUT, $this->getTimeout()); // 超时设置
|
||||
@@ -152,7 +152,7 @@ class Curl extends ClientAbstracts
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
private function parseResponse($curl, $output, $params = []): mixed
|
||||
private function parseResponse($curl, $output, array $params = []): mixed
|
||||
{
|
||||
curl_close($curl);
|
||||
if ($output === FALSE) {
|
||||
@@ -199,7 +199,7 @@ class Curl extends ClientAbstracts
|
||||
private function headerFormat($headers): array
|
||||
{
|
||||
$_tmp = [];
|
||||
foreach ($headers as $key => $val) {
|
||||
foreach ($headers as $val) {
|
||||
$trim = explode(': ', trim($val));
|
||||
|
||||
$_tmp[strtolower($trim[0])] = $trim[1] ?? '';
|
||||
@@ -1,327 +0,0 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace HttpServer\Client;
|
||||
|
||||
|
||||
use Exception;
|
||||
use HttpServer\Http\Context;
|
||||
use Server\Events\OnAfterRequest;
|
||||
use Kiri\Abstracts\Component;
|
||||
use Kiri\Channel;
|
||||
use Kiri\Core\Json;
|
||||
use Kiri\Core\Xml;
|
||||
use Kiri\Event;
|
||||
use Kiri\Events\EventProvider;
|
||||
use Kiri\Kiri;
|
||||
use Swoole\Coroutine\Http2\Client as H2Client;
|
||||
use Swoole\Http2\Request;
|
||||
use Swoole\Http2\Response;
|
||||
|
||||
|
||||
/**
|
||||
* Class Http2
|
||||
* @package HttpServer\Client
|
||||
*/
|
||||
class Http2 extends Component
|
||||
{
|
||||
|
||||
|
||||
private array $_clients = [];
|
||||
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function init()
|
||||
{
|
||||
Event::on(Event::SYSTEM_RESOURCE_RELEASES, [$this, 'releases']);
|
||||
Event::on(Event::SYSTEM_RESOURCE_CLEAN, [$this, 'clean']);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @throws Exception
|
||||
*/
|
||||
public function releases()
|
||||
{
|
||||
$this->_clients = [];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 清空
|
||||
*/
|
||||
public function clean()
|
||||
{
|
||||
foreach ($this->_clients as $client) {
|
||||
/** @var H2Client $client */
|
||||
$client->close();
|
||||
}
|
||||
$this->_clients = [];
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param bool $isRev
|
||||
* @return Http2
|
||||
*/
|
||||
public function setIsRev(bool $isRev): static
|
||||
{
|
||||
Context::setContext('http2isRev', $isRev);
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param int $timeout
|
||||
* @return Http2
|
||||
*/
|
||||
public function setTimeout(int $timeout): static
|
||||
{
|
||||
Context::setContext('http2timeout', $timeout);
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param array $headers
|
||||
* @return Http2
|
||||
*/
|
||||
public function setHeader(array $headers): static
|
||||
{
|
||||
Context::setContext('http2Headers', $headers);
|
||||
return $this;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $path
|
||||
* @param array $params
|
||||
* @param int $timeout
|
||||
* @return Result
|
||||
* @throws Exception
|
||||
*/
|
||||
public function get($domain, $path, array $params = [], int $timeout = -1): Result
|
||||
{
|
||||
$request = $this->dispatch($domain, $path, 'GET', $params, $timeout);
|
||||
|
||||
return new Result(['code' => 0, 'data' => $request]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $path
|
||||
* @param array $params
|
||||
* @param int $timeout
|
||||
* @return Result
|
||||
* @throws Exception
|
||||
*/
|
||||
public function post($domain, $path, array $params = [], int $timeout = -1): Result
|
||||
{
|
||||
$request = $this->dispatch($domain, $path, 'POST', $params, $timeout);
|
||||
|
||||
return new Result(['code' => 0, 'data' => $request]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $path
|
||||
* @param array $params
|
||||
* @param int $timeout
|
||||
* @return Result
|
||||
* @throws Exception
|
||||
*/
|
||||
public function upload($domain, $path, array $params = [], int $timeout = -1): Result
|
||||
{
|
||||
$request = $this->dispatch($domain, $path, 'POST', $params, $timeout, true);
|
||||
|
||||
return new Result(['code' => 0, 'data' => $request]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $path
|
||||
* @param array $params
|
||||
* @param int $timeout
|
||||
* @return Result
|
||||
* @throws Exception
|
||||
*/
|
||||
public function delete($domain, $path, array $params = [], int $timeout = -1): Result
|
||||
{
|
||||
$request = $this->dispatch($domain, $path, 'DELETE', $params, $timeout);
|
||||
|
||||
return new Result(['code' => 0, 'data' => $request]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $path
|
||||
* @param $method
|
||||
* @param array $params
|
||||
* @param int $timeout
|
||||
* @param bool $isUpload
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
private function dispatch($domain, $path, $method, array $params = [], int $timeout = -1, bool $isUpload = false): mixed
|
||||
{
|
||||
[$domain, $isSsl] = $this->clear($domain);
|
||||
|
||||
$request = $this->getRequest($path, $method, $params, $isUpload);
|
||||
$request->headers = array_merge($request->headers, [
|
||||
'Host' => $domain
|
||||
]);
|
||||
return $this->doRequest($request, $domain, $isSsl, $timeout);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @return array
|
||||
*/
|
||||
private function clear($domain): array
|
||||
{
|
||||
if (str_starts_with($domain, 'https://')) {
|
||||
return [str_replace('https://', '', $domain), true];
|
||||
} else {
|
||||
return [str_replace('http://', '', $domain), false];
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param Request $request
|
||||
* @param $domain
|
||||
* @param $ssl
|
||||
* @param $timeout
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
private function doRequest(Request $request, $domain, $ssl, $timeout): mixed
|
||||
{
|
||||
$client = $this->getClient($domain, $ssl, $timeout);
|
||||
$client->send($request);
|
||||
if (Context::getContext('http2isRev') === false) {
|
||||
return null;
|
||||
}
|
||||
return $this->rev($client);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $client
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
private function rev($client): mixed
|
||||
{
|
||||
/** @var Response $response */
|
||||
if (!Context::hasContext('http2timeout')) {
|
||||
$response = $client->recv();
|
||||
} else {
|
||||
$response = $client->recv((int)Context::getContext('http2timeout'));
|
||||
}
|
||||
if ($response === false || $response->statusCode > 200) {
|
||||
throw new Exception($client->errMsg, $client->errCode);
|
||||
}
|
||||
$header = $response->headers['content-type'];
|
||||
if (str_starts_with($header, 'application/json;')) {
|
||||
return Json::decode($response->data);
|
||||
} else if (str_starts_with($header, 'application/xml;')) {
|
||||
return Xml::toArray($response->data);
|
||||
} else {
|
||||
return $response->data;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $path
|
||||
* @param array $params
|
||||
* @param int $timeout
|
||||
* @return mixed
|
||||
* @throws Exception
|
||||
*/
|
||||
public function put($domain, $path, array $params = [], int $timeout = -1): Result
|
||||
{
|
||||
$request = $this->dispatch($domain, $path, 'PUT', $params, $timeout);
|
||||
|
||||
return new Result(['code' => 0, 'data' => $request]);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $path
|
||||
* @param $method
|
||||
* @param $params
|
||||
* @param bool $isUpload
|
||||
* @return Request
|
||||
* @throws Exception
|
||||
*/
|
||||
public function getRequest($path, $method, $params, bool $isUpload = false): Request
|
||||
{
|
||||
if (!str_starts_with($path, '/')) {
|
||||
$path = '/' . $path;
|
||||
}
|
||||
|
||||
$request = new Request();
|
||||
$request->method = $method;
|
||||
$request->path = $path;
|
||||
if ($method === 'GET') {
|
||||
$request->path .= '?' . http_build_query($params);
|
||||
} else {
|
||||
$request->data = !is_string($params) && !$isUpload ? Json::encode($params) : $params;
|
||||
}
|
||||
$request->headers = Context::getContext('http2Headers');
|
||||
return $request;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param bool $isSsl
|
||||
* @param int $timeout
|
||||
* @return H2Client
|
||||
* @throws Exception
|
||||
*/
|
||||
private function getClient($domain, bool $isSsl = false, int $timeout = -1): H2Client
|
||||
{
|
||||
if (isset($this->_clients[$domain])) {
|
||||
return $this->_clients[$domain];
|
||||
}
|
||||
$client = $this->newRequest($domain, $isSsl, $timeout);
|
||||
if ((!$client->connected || !$client->ping()) && !$client->connect()) {
|
||||
throw new Exception($client->errMsg, $client->errCode);
|
||||
}
|
||||
return $this->_clients[$domain] = $client;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @param $domain
|
||||
* @param $isSsl
|
||||
* @param $timeout
|
||||
* @return H2Client
|
||||
*/
|
||||
public function newRequest($domain, $isSsl, $timeout): H2Client
|
||||
{
|
||||
$domain = rtrim($domain, '/');
|
||||
if (str_contains($domain, ':')) {
|
||||
[$domain, $port] = explode(':', $domain);
|
||||
} else {
|
||||
$port = $isSsl === true ? 443 : 80;
|
||||
}
|
||||
$client = new H2Client($domain, (int)$port, $isSsl);
|
||||
$client->set(['timeout' => $timeout, 'ssl_host_name' => $domain]);
|
||||
return $client;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
@@ -4,13 +4,12 @@
|
||||
namespace HttpServer\Client;
|
||||
|
||||
|
||||
use Exception;
|
||||
use HttpServer\Client\Client;
|
||||
use HttpServer\Client\Curl;
|
||||
use HttpServer\Client\IClient;
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
use Kiri\Abstracts\Component;
|
||||
use Kiri\Kiri;
|
||||
use Swoole\Coroutine;
|
||||
use HttpServer\Client\Help\IClient;
|
||||
use HttpServer\Client\Help\Client;
|
||||
use HttpServer\Client\Help\Curl;
|
||||
|
||||
/**
|
||||
* Class ClientDriver
|
||||
@@ -24,17 +23,29 @@ class HttpClient extends Component
|
||||
*/
|
||||
public static function NewRequest(): IClient
|
||||
{
|
||||
return Coroutine::getCid() > -1 ? Client::NewRequest() : Curl::NewRequest();
|
||||
if (Coroutine::getCid() > -1) {
|
||||
return Client::NewRequest();
|
||||
}
|
||||
return Curl::NewRequest();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Http2
|
||||
* @throws Exception
|
||||
* @return Curl
|
||||
*/
|
||||
public static function http2(): Http2
|
||||
#[Pure] public function getCurl(): Curl
|
||||
{
|
||||
return Kiri::app()->get('http2');
|
||||
return Curl::NewRequest();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* @return Client
|
||||
*/
|
||||
#[Pure] public function getCoroutine(): Client
|
||||
{
|
||||
return Client::NewRequest();
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -1,7 +1,7 @@
|
||||
<?php
|
||||
|
||||
|
||||
namespace HttpServer\Client\Help;
|
||||
namespace HttpServer\Client;
|
||||
|
||||
|
||||
use Closure;
|
||||
@@ -1,9 +1,10 @@
|
||||
<?php
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace HttpServer\Client\Help;
|
||||
namespace HttpServer\Client;
|
||||
|
||||
use Exception;
|
||||
use JetBrains\PhpStorm\Pure;
|
||||
|
||||
|
||||
/**
|
||||
@@ -18,12 +19,11 @@ use Exception;
|
||||
*/
|
||||
class Result
|
||||
{
|
||||
public $code;
|
||||
public $message;
|
||||
public int|string $code;
|
||||
public string $message;
|
||||
public int $count = 0;
|
||||
|
||||
/** @var mixed $data */
|
||||
public $data;
|
||||
public mixed $data;
|
||||
public ?array $header;
|
||||
public int $httpStatus = 200;
|
||||
|
||||
@@ -133,7 +133,7 @@ class Result
|
||||
* @param int $status
|
||||
* @return bool
|
||||
*/
|
||||
public function isResultsOK($status = 0): bool
|
||||
#[Pure] public function isResultsOK(int $status = 0): bool
|
||||
{
|
||||
if (!$this->httpIsOk()) {
|
||||
return false;
|
||||
@@ -158,17 +158,17 @@ class Result
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
* @return string
|
||||
*/
|
||||
public function getMessage(): mixed
|
||||
public function getMessage(): string
|
||||
{
|
||||
return $this->message;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return mixed
|
||||
* @return string|int
|
||||
*/
|
||||
public function getCode(): mixed
|
||||
public function getCode(): string|int
|
||||
{
|
||||
return $this->code;
|
||||
}
|
||||
@@ -13,12 +13,10 @@ namespace Kiri\Abstracts;
|
||||
use Annotation\Annotation as SAnnotation;
|
||||
use Database\Connection;
|
||||
use Exception;
|
||||
use HttpServer\Client\Http2;
|
||||
use HttpServer\Http\HttpHeaders;
|
||||
use HttpServer\Http\HttpParams;
|
||||
use HttpServer\Http\Request;
|
||||
use HttpServer\Http\Response;
|
||||
use HttpServer\HttpFilter;
|
||||
use HttpServer\Route\Router;
|
||||
use HttpServer\Server;
|
||||
use HttpServer\Shutdown;
|
||||
@@ -477,9 +475,6 @@ abstract class BaseApplication extends Component
|
||||
'kafka-container' => ['class' => KafkaProvider::class],
|
||||
'response' => ['class' => Response::class],
|
||||
'request' => ['class' => Request::class],
|
||||
'rpc' => ['class' => Producer::class],
|
||||
'rpc-service' => ['class' => Service::class],
|
||||
'http2' => ['class' => Http2::class],
|
||||
'shutdown' => ['class' => Shutdown::class],
|
||||
]);
|
||||
}
|
||||
|
||||
@@ -6,23 +6,20 @@ namespace Kiri\Abstracts;
|
||||
|
||||
use Annotation\Annotation as SAnnotation;
|
||||
use Database\DatabasesProviders;
|
||||
use HttpServer\Client\Help\Client;
|
||||
use HttpServer\Client\Help\Curl;
|
||||
use HttpServer\Client\Http2;
|
||||
use HttpServer\Client\Client;
|
||||
use HttpServer\Client\Curl;
|
||||
use HttpServer\Http\Request;
|
||||
use HttpServer\Http\Response;
|
||||
use HttpServer\HttpFilter;
|
||||
use HttpServer\Route\Router;
|
||||
use HttpServer\Server;
|
||||
use HttpServer\Shutdown;
|
||||
use Rpc\Producer as RPCProducer;
|
||||
use Kiri\Crontab\Producer;
|
||||
use Kiri\Async;
|
||||
use Kiri\Cache\Redis;
|
||||
use Kiri\Error\Logger;
|
||||
use Kiri\Event;
|
||||
use Kiri\Jwt\Jwt;
|
||||
use Kiri\Pool\Connection;
|
||||
use Kiri\Pool\Pool;
|
||||
|
||||
/**
|
||||
* Trait TraitApplication
|
||||
@@ -38,14 +35,12 @@ use Kiri\Pool\Pool;
|
||||
* @property Logger $logger
|
||||
* @property Jwt $jwt
|
||||
* @property SAnnotation $annotation
|
||||
* @property Http2 $http2
|
||||
* @property BaseGoto $goto
|
||||
* @property Client $client
|
||||
* @property \Database\Connection $databases
|
||||
* @property Curl $curl
|
||||
* @property \Kiri\Crontab\Producer $crontab
|
||||
* @property Producer $crontab
|
||||
* @property HttpFilter $filter
|
||||
* @property RPCProducer $rpc
|
||||
* @property Shutdown $shutdown
|
||||
*/
|
||||
trait TraitApplication
|
||||
|
||||
Reference in New Issue
Block a user