
Swoft рдПрдХ PHP рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди microservice coroutine рдврд╛рдВрдЪрд╛ рд╣реИред рдпрд╣ рдХрдИ рд╡рд░реНрд╖реЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ php рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдХрд▓реНрдк рдмрди рдЧрдпрд╛ рд╣реИред рдпрд╣ рдЧреЛ, рдмрд┐рд▓реНрдЯ-рдЗрди рдХреЛрд░рдЯрд╛рдЗрди рд╡реЗрдм рд╕рд░реНрд╡рд░ рдФрд░ рдХреЙрд░рдЖрдЙрдЯ рдХреЙрдЗрди рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рд╣ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдпрд╣ рдкрд╛рд░рдВрдкрд░рд┐рдХ PHP-FPM рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдореЗрдореЛрд░реА рдореЗрдВ рд╕реНрдерд┐рдд рд╣реИред рд╕реНрдкреНрд░рд┐рдВрдЧ рдХреНрд▓рд╛рдЙрдб рдврд╛рдВрдЪреЗ рдХреЗ рд╕рдорд╛рди рдПрдиреЛрдЯреЗрд╢рди рдХреЗ рд╕рдорд╛рди рдЧреЛ рднрд╛рд╖рд╛ рд╕рдВрдЪрд╛рд▓рди рднреА рд╣реИрдВред
Github
https://github.com/swoft-cloud/swoft
рдлрд╝реАрдЪрд░
рдкреВрд░реНрдг coroutine рдврд╛рдВрдЪрд╛
рд╕реНрд╡рд┐рдлреНрдЯ рдкрд╣рд▓реА рдмрд╛рд░ рдПрдиреЛрдЯреЗрд╢рди рдореЗрдореЛрд░реА рдореЗрдореЛрд░реА рдлреНрд░реЗрдорд╡рд░реНрдХ рдореЗрдВ рдирд┐рд╡рд╛рд╕реА рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдкреНрд░рд┐рдВрдЧ рдмреВрдЯ рдХрдиреНрд╡реЗрдВрд╢рди рдХреЙрдиреНрдлрд┐рдЧрд░реЗрд╢рди рдбрд┐рдЬрд╛рдЗрди рдХреЙрдиреНрд╕реЗрдкреНрдЯ рд╕реЗ рдмрдбрд╝рд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдбреЗрд╡рд▓рдкрдореЗрдВрдЯ рд╕реНрдкреЗрд╕рд┐рдлрд┐рдХреЗрд╢рдВрд╕ рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИред
AOP
AOP рдПрдХ рдСрдмреНрдЬреЗрдХреНрдЯ рдУрд░рд┐рдПрдВрдЯреЗрдб рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рд╣реИ рдЬреЛ рд╡реНрдпрд╛рдкрд╛рд░ рдХреЛрдб рдХреЛ рдбрд┐рдХреВрдк рдХрд░рдиреЗ, рдХреЛрдб рдХреА рдЧреБрдгрд╡рддреНрддрд╛ рдореЗрдВ рд╕реБрдзрд╛рд░ рдХрд░рдиреЗ рдФрд░ рдХреЛрдб рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХреЛ рдмрдврд╝рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╕рд╛рди рдмрдирд╛рддрд╛ рд╣реИред
class CalcExecTimeAspect { protected $start; public function before() { $this->start = microtime(true); } public function after(JoinPoint $joinPoint) { $method = $joinPoint->getMethod(); $after = microtime(true); $runtime = ($after - $this->start) * 1000; echo "{$method} cost: {$runtime}ms\n"; } }
Http рд╕реЗрд╡рд╛
Http рд╕реЗрд╡рд╛ рд╕рд░рд▓ рдФрд░ рд▓рдЪреАрд▓реА рд╣реИ, рдХреЗрд╡рд▓ рд╕реЗрд╡рд╛ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП @Controller()
рдФрд░ @RequestMapping(route="index")
рдПрдиреЛрдЯреЗрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВ
class IndexController { public function index(): string { return "test"; } }
рд╡реЗрдмрд╕реЛрдХреЗрдЯ рд╕реЗрд╡рд╛
Swoft рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╡реЗрдмрд╕реИрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рддрд╛рдХрд┐ рд╡рд╣ рдЬрд▓реНрджреА рд╕реЗ рд╕реЗрд╡рд╛ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░ рд╕рдХреЗ
class ChatModule { public function onOpen(Request $request, int $fd): void { server()->push($request->getFd(), "Opened, welcome!(FD: $fd)"); } }
рдЖрд░рдкреАрд╕реА рд╕реЗрд╡рд╛
Swoft RPC рдХреЛ рдбреЛрдмреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдПрдХ рдореВрд▓ рдХрд╛рд░реНрдп рдХрд╣рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
class RpcController { private $userService; public function getList(): array { $result = $this->userService->getList(12, 'type'); return [$result]; } }
рдЯреАрд╕реАрдкреА рд╕реЗрд╡рд╛
Swoft рднреА рд╕реБрд╡рд┐рдзрд╛ рд╕рдВрдкрдиреНрди TCP рд╕реЗрд╡рд╛ рд╕рдорд░реНрдерди рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
<?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 { public function echo(Request $request, Response $response): void {
рдХрдиреЗрдХреНрд╢рди рдкреВрд▓
Swoft рдЗрд╕ рддрд░рд╣ рдХреЗ рд╕рд╛рде рдПрдХ рдЙрдЪреНрдЪ рдкреНрд░рджрд░реНрд╢рди рдХрдиреЗрдХреНрд╢рди рдкреВрд▓ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд░рд▓ рд╣реИ:
return [ 'xxx.pool' => [ 'class' => \Swoft\xxx\Pool::class, 'minActive' => 10, 'maxActive' => 20, 'maxWait' => 0, 'maxWaitTime' => 0, 'maxIdleTime' => 60, ] ];
рд▓рд╛рд░рд╡реЗрд▓ рдУрдЖрд░рдПрдо рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд
Swoft рдбреЗрдЯрд╛рдмреЗрд╕, Laravel ORM рдХреЗ рд╕рд╛рде рдЕрддреНрдпрдзрд┐рдХ рд╕рдВрдЧрдд рд╣реИ, PHP рдбреЗрд╡рд▓рдкрд░ рдХреЗ рд▓рд┐рдП Swoft рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
Microservice
рд╕реНрд╡рд┐рдлреНрдЯ рддреНрд╡рд░рд┐рдд рдмрд┐рд▓реНрдб рдорд╛рдЗрдХреНрд░реЛрд╕рд░реНрд╡рд┐рд╕ рд╢рд╛рд╕рди рдШрдЯрдХреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ, рдбреЗрд╡рд▓рдкрд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реИред
- рд╕реЗрд╡рд╛ рдкрдВрдЬреАрдХрд░рдг рдФрд░ рдЦреЛрдЬ
- рд╕реЗрд╡рд╛ рджрд▓рд╛рд▓
- рдХреЗрдВрджреНрд░реАрдХреГрдд рд╡рд┐рдиреНрдпрд╛рд╕
- рд╕реЗрд╡рд╛ рдереНрд░реЙрдЯрд▓рд┐рдВрдЧ рдХреНрд╖рдорддрд╛
class Test { public function func(): string {
Github
https://github.com/swoft-cloud/swoft
рдмреЗрдВрдЪрдорд╛рд░реНрдХ
