Kerangka kerja microservice PHP - Swoft


Swoft adalah kerangka kerja coroutine microservice kinerja tinggi PHP. Ini telah diterbitkan selama bertahun-tahun dan telah menjadi pilihan terbaik untuk php. Ini bisa seperti Go, server web coroutine bawaan dan klien coroutine umum dan ada dalam memori, tidak tergantung pada PHP-FPM tradisional. Ada operasi Go bahasa yang serupa, mirip dengan anotasi fleksibel kerangka kerja Cloud Spring.


Github


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


Fitur


Kerangka kerja coroutine lengkap


Swoft adalah residen PHP pertama dalam kerangka anotasi memori, dengan konvensi Spring Boot lebih besar dari konsep desain konfigurasi, dengan serangkaian spesifikasi pengembangan.


Aop


AOP adalah pemrograman berorientasi objek yang membuatnya lebih mudah untuk memisahkan kode bisnis, meningkatkan kualitas kode, dan meningkatkan penggunaan kembali kode.


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

Layanan Http


Layanan Http sederhana dan fleksibel, hanya menggunakan @Controller() dan @RequestMapping(route="index") untuk mendefinisikan layanan。


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

Layanan websocket


Swoft menyediakan Websocket lengkap bagi pengembang untuk membangun layanan dengan cepat


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

Layanan RPC


Swoft RPC dapat disebut seperti fungsi asli sebagai 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]; } } 

Layanan TCP


Swoft juga menyediakan dukungan layanan TCP yang kaya fitur.


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

Kolam koneksi


Swoft mudah untuk mendefinisikan kumpulan koneksi kinerja tinggi dengan seperti ini:


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

Kompatibel dengan Laravel ORM


Database Swoft sangat kompatibel dengan Laravel ORM, Sangat mudah bagi pengembang PHP untuk digunakan di 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(); 

Layanan microser


Swoft menyediakan satu set komponen tata kelola layanan-mikro yang cepat dibangun, mudah bagi pengembang untuk digunakan.


  • Pendaftaran dan Penemuan Layanan
  • Pialang layanan
  • Konfigurasi terpusat
  • Kemampuan pelambatan layanan

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


Tolok ukur


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


All Articles