PHP Microservice Framework - Swoft


Swoft ist ein PHP-Hochleistungs-Microservice-Coroutine-Framework. Es wurde seit vielen Jahren veröffentlicht und ist die beste Wahl für PHP geworden. Es kann wie Go, ein integrierter Coroutine-Webserver und ein allgemeiner Coroutine-Client sein und befindet sich unabhängig vom herkömmlichen PHP-FPM im Speicher. Es gibt ähnliche Go-Sprachoperationen, ähnlich den flexiblen Annotationen des Spring Cloud-Frameworks.


Github


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


Funktion


Vollständiges Coroutine-Framework


Swoft ist das erste PHP-residente Framework für Speicheranmerkungen. Die Spring Boot-Konventionen sind größer als das Konfigurationsdesign-Konzept und enthalten eine Reihe von Entwicklungsspezifikationen.


Aop


AOP ist eine objektorientierte Programmierung, die es einfacher macht, Geschäftscode zu entkoppeln, die Codequalität zu verbessern und die Wiederverwendbarkeit von Code zu erhöhen.


/** * @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"; } } 

HTTP-Service


Der HTTP-Dienst ist einfach und flexibel, nur um die @Controller() und @RequestMapping(route="index") zum Definieren des Dienstes zu verwenden。


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

Websocket-Service


Swoft bietet Entwicklern ein vollständiges Websocket, mit dem sie schnell einen Service erstellen können


 /** * @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)"); } } 

RPC-Dienst


Swoft RPC kann wie eine native Funktion als Dubbo bezeichnet werden.


 /** * @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]; } } 

TCP-Dienst


Swoft bietet auch funktionsreiche Unterstützung für TCP-Dienste.


 <?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); } } 

Verbindungspool


Swoft ist einfach zu definieren, um einen Hochleistungsverbindungspool wie folgt zu definieren:


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

Kompatibel mit Laravel ORM


Die Swoft-Datenbank ist sehr kompatibel mit Laravel ORM. Für PHP-Entwickler ist die Verwendung in Swoft einfach.


 // 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(); 

Microservice


Swoft bietet eine Reihe von schnell zu erstellenden Microservice-Governance-Komponenten, die für Entwickler einfach zu verwenden sind.


  • Serviceregistrierung und -ermittlung
  • Service Broker
  • Zentralisierte Konfiguration
  • Service-Drosselungsfähigkeit

 /** * @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


Benchmark


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


All Articles