
Apa itu Swoft?
Swoft adalah kerangka kerja coroutine microservices PHP yang didasarkan pada ekstensi Swoole . Seperti halnya Go, Swoft memiliki server web coroutine bawaan dan klien coroutine yang umum dan terdapat dalam memori, tidak tergantung pada PHP-FPM tradisional. Ada operasi Go bahasa yang serupa, mirip dengan anonimasi kerangka kerja Spring Cloud, wadah injeksi ketergantungan global yang kuat, tata kelola layanan komprehensif, AOP fleksibel dan kuat, penerapan spesifikasi PSR standar, dan sebagainya.
Melalui tiga tahun akumulasi dan eksplorasi arah, Swoft telah menjadikan Swoft Spring Cloud di dunia PHP, yang merupakan pilihan terbaik untuk kerangka kerja kinerja tinggi PHP dan manajemen layanan mikro.
Tata kelola layanan yang elegan
Swoft secara resmi merekomendasikan bahwa pengembang menggunakan pola-pola mesh layanan, seperti kerangka kerja Istio / Utusan, untuk memisahkan tata kelola bisnis dan layanan, tetapi Swoft juga menyediakan satu set komponen layanan-mikro untuk bisnis kecil dan menengah untuk dengan cepat membangun layanan-mikro.
Pendaftaran dan penemuan layanan
Untuk registrasi dan penemuan layanan, komponen konsul swoft yang disediakan oleh Swoft diperlukan, jika pihak ketiga lainnya serupa.
Layanan pendaftaran dan pembatalan
Dengarkan acara SwooleEvent::START
, daftarkan layanan
class RegisterServiceListener implements EventHandlerInterface { private $agent; public function handle(EventInterface $event): void { $httpServer = $event->getTarget(); $service = [
Dengarkan acara SwooleEvent::SHUTDOWN
, batalkan layanan
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(); } }
Penemuan layanan
Menentukan penyedia layanan
class RpcProvider implements ProviderInterface { private $agent; public function getList(Client $client): array {
Penyedia layanan konfigurasi
return [ 'user' => [ 'class' => ServiceClient::class, 'provider' => bean(RpcProvider::class)
Pemecah layanan
Swoft menggunakan anotasi @Breaker
untuk mendapatkan pukulan, yang dapat meledak pada metode apa pun.
class BreakerLogic { public function func(): string {
Batas layanan
Swoft menggunakan anotasi @RateLimiter
untuk mengimplementasikan @RateLimiter
layanan, yang dapat @RateLimiter
pada metode apa pun, tidak hanya pada pengontrol, dan KEY juga mendukung bahasa ekspresi symfony / ekspresi- bahasa.
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]; } }
Pusat konfigurasi
Pusat konfigurasi perlu menggunakan komponen Swoft-apollo yang disediakan oleh Swoft secara resmi, jika pihak ketiga lainnya serupa.
Menyatakan agen
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(); } } }
Mulai agen
Agen hanya perlu dijalankan sebelum layanan (Http / RPC / Websocket) dimulai.
php bin/swoft agent:index
Sumberdaya