
O que é o Swoft?
O Swoft é uma estrutura de rotina de microsserviços PHP baseada na extensão Swoole . Assim como o Go, o Swoft possui um servidor da web de rotina embutido e um cliente comum de rotina e reside na memória, independentemente do PHP-FPM tradicional. Existem operações similares no idioma Go, semelhantes às anotações flexíveis da estrutura Spring Cloud, poderoso contêiner de injeção de dependência global, governança de serviço abrangente, AOP flexível e poderosa, implementação padrão da especificação PSR e assim por diante.
Através de três anos de acumulação e exploração de direção, a Swoft transformou a Swoft na Spring Cloud no mundo PHP, que é a melhor escolha para o gerenciamento de framework e microsserviços de alto desempenho do PHP.
Governança de serviço elegante
A Swoft recomenda oficialmente que os desenvolvedores usem padrões de malha de serviço, como a estrutura Istio / Envoy, para separar a governança de negócios e serviços, mas a Swoft também fornece um conjunto de componentes de microsserviços para pequenas e médias empresas criarem microsserviços rapidamente.
Registro e descoberta de serviço
Para registro e descoberta de serviço, é necessário o componente swoft-consul fornecido pela Swoft, se outros terceiros forem semelhantes.
Serviços de registro e cancelamento
Ouça o evento SwooleEvent::START , registre o serviço
  class RegisterServiceListener implements EventHandlerInterface {  private $agent;  public function handle(EventInterface $event): void {  $httpServer = $event->getTarget(); $service = [  
Ouça o evento SwooleEvent::SHUTDOWN , cancele o serviço
  class DeregisterServiceListener implements EventHandlerInterface {  private $agent;  public function handle(EventInterface $event): void {  $httpServer = $event->getTarget(); $scheduler = Swoole\Coroutine\Scheduler(); $scheduler->add(function () use ($httpServer) { $this->agent->deregisterService('swoft'); }); $scheduler->start(); } } 
Descoberta de serviço
Definindo um provedor de serviços
  class RpcProvider implements ProviderInterface {  private $agent;  public function getList(Client $client): array {  
Fornecedor de serviços de configuração
 return [ 'user' => [ 'class' => ServiceClient::class, 'provider' => bean(RpcProvider::class)  
Disjuntor de serviço
O Swoft usa a anotação @Breaker para obter um golpe, que pode ser acionado em qualquer método.
  class BreakerLogic {  public function func(): string {  
Limite de serviço
O Swoft usa a anotação @RateLimiter para implementar a otimização de serviço, que pode ser otimizada em qualquer método, não apenas no controlador, e a KEY também suporta a linguagem de expressão symfony / idioma de expressão.
  class LimiterController {  public function requestLimiter(Request $request): array { $uri = $request->getUriPath(); return ['requestLimiter', $uri]; }  public function limiterFallback(Request $request): array { $uri = $request->getUriPath(); return ['limiterFallback', $uri]; } } 
Centro de configuração
O centro de configuração precisa usar o componente Swoft-apollo fornecido oficialmente pela Swoft, se outros terceiros forem semelhantes.
Declarar agente
  class AgentCommand {  private $config;  public function index(): void { $namespaces = [ 'application' ]; while (true) { try { $this->config->listen($namespaces, [$this, 'updateConfigFile']); } catch (Throwable $e) { CLog::error('Config agent fail(%s %s %d)!', $e->getMessage(), $e->getFile(), $e->getLine()); } } }  public function updateConfigFile(array $data): void { foreach ($data as $namespace => $namespaceData) { $configFile = sprintf('@config/%s.php', $namespace); $configKVs = $namespaceData['configurations'] ?? ''; $content = '<?php return ' . var_export($configKVs, true) . ';'; Co::writeFile(alias($configFile), $content, FILE_NO_DEFAULT_CONTEXT); CLog::info('Apollo update success!');  $server = bean('httpServer'); $server->restart(); } } } 
Agente inicial
O agente só precisa ser executado antes que o serviço (Http / RPC / Websocket) seja iniciado.
 php bin/swoft agent:index 
Recurso