Estrutura de microsserviço PHP - Swoft


O Swoft é um framework de alto desempenho em microsserviços em PHP. Foi publicado por muitos anos e se tornou a melhor escolha para php. Pode ser como Go, servidor da web incorporado de corotina e cliente comum de corotina e é residente na memória, independentemente do PHP-FPM tradicional. Existem operações de idioma Go semelhantes, semelhantes às anotações flexíveis da estrutura Spring Cloud.


Github


https://github.com/swoft-cloud/swoft


Recurso


Estrutura completa da rotina


O Swoft é o primeiro residente do PHP na estrutura de anotação de memória, com as convenções do Spring Boot maiores que o conceito de design de configuração, com um conjunto de especificações de desenvolvimento.


Aop


AOP é uma programação orientada a objetos que facilita a dissociação do código comercial, melhora a qualidade do código e aumenta a reutilização do código.


/** * @Aspect(order=1) * @PointBean(include={"App\Http\Controller\TestExecTimeController"}) */ class CalcExecTimeAspect { protected $start; /** * @Before() */ public function before() { $this->start = microtime(true); } /** * @After() */ public function after(JoinPoint $joinPoint) { $method = $joinPoint->getMethod(); $after = microtime(true); $runtime = ($after - $this->start) * 1000; echo "{$method} cost: {$runtime}ms\n"; } } 

Serviço HTTP


O serviço HTTP é simples e flexível, apenas para usar as @Controller() e @RequestMapping(route="index") para definir o serviço。


 /** * @Controller() */ class IndexController { /** * @RequestMapping(route="index") */ public function index(): string { return "test"; } } 

Serviço Websocket


A Swoft fornece um Websocket completo para os desenvolvedores criarem serviços rapidamente


 /** * @WsModule( * "/chat", * messageParser=TokenTextParser::class, * controllers={HomeController::class} * ) */ class ChatModule { /** * @OnOpen() * @param Request $request * @param int $fd */ public function onOpen(Request $request, int $fd): void { server()->push($request->getFd(), "Opened, welcome!(FD: $fd)"); } } 

Serviço RPC


O Swoft RPC pode ser chamado como uma função nativa como Dubbo.


 /** * @Controller() */ class RpcController { /** * @Reference(pool="user.pool", version="1.0") * * @var UserInterface */ private $userService; /** * @RequestMapping("getList") * * @return array */ public function getList(): array { $result = $this->userService->getList(12, 'type'); return [$result]; } } 

Serviço TCP


O Swoft também oferece suporte ao serviço TCP rico em recursos.


 <?php declare(strict_types=1); namespace App\Tcp\Controller; use Swoft\Tcp\Server\Annotation\Mapping\TcpController; use Swoft\Tcp\Server\Annotation\Mapping\TcpMapping; use Swoft\Tcp\Server\Request; use Swoft\Tcp\Server\Response; /** * Class DemoController * * @TcpController() */ class DemoController { /** * @TcpMapping("echo", root=true) * @param Request $request * @param Response $response */ public function echo(Request $request, Response $response): void { // $str = $request->getRawData(); $str = $request->getPackage()->getDataString(); $response->setData('[echo]hi, we received your message: ' . $str); } } 

Pool de conexão


O Swoft é simples de definir um pool de conexões de alto desempenho com o seguinte:


 return [ 'xxx.pool' => [ 'class' => \Swoft\xxx\Pool::class, 'minActive' => 10, 'maxActive' => 20, 'maxWait' => 0, 'maxWaitTime' => 0, 'maxIdleTime' => 60, ] ]; 

Compatível com Laravel ORM


O banco de dados Swoft é altamente compatível com o Laravel ORM. É fácil para o desenvolvedor PHP usar no Swoft.


 // Model $user = User::new(); $user->setName('name'); $user->setSex(1); $user->setDesc('this my desc'); $user->setAge(mt_rand(1, 100)); $user->save(); $id = $user->getId(); // Query $users = DB::table('user')->get(); foreach ($users as $user) { echo $user->name; } // Transaction B::beginTransaction(); $user = User::find($id); $user->update(['name' => $id]); DB::beginTransaction(); User::find($id)->update(['name'=>'sakuraovq']); DB::rollBack(); DB::commit(); 

Microserviço


O Swoft fornece um conjunto de componentes de governança de microsserviço de construção rápida, fáceis de usar pelos desenvolvedores.


  • Registro e descoberta de serviços
  • Corretor de serviços
  • Configuração centralizada
  • Capacidade de limitação de serviço

 /** * @Bean() */ class Test { /** * @Breaker(fallback="funcFallback") * * @return string * @throws Exception */ public function func(): string { // Do something throw new Exception('Breaker exception'); } /** * @RequestMapping() * @RateLimiter(key="request.getUriPath()") * * @param Request $request * * @return array */ public function requestLimiter(Request $request): array { $uri = $request->getUriPath(); return ['requestLimiter', $uri]; } } 

Github


https://github.com/swoft-cloud/swoft


Referência


Source: https://habr.com/ru/post/pt463761/


All Articles