
ما هو Swoft؟
Swoft عبارة عن إطار كوروتي لخدمات PHP يعتمد على امتداد Swoole . مثل Go ، يحتوي Swoft على خادم ويب coroutine مدمج وعميل coroutine مشترك ويقيم في الذاكرة ، مستقل عن PHP-FPM التقليدي. هناك عمليات Go Go مماثلة ، مثل الشروح المرنة لإطار Spring Cloud ، وحاوية حقن التبعية العالمية القوية ، وحوكمة الخدمة الشاملة ، AOP المرنة والقوية ، وتنفيذ مواصفات PSR القياسية وما إلى ذلك.
من خلال ثلاث سنوات من التراكم واستكشاف الاتجاهات ، جعلت Swoft Swoft the Spring Cloud في عالم PHP ، وهو الخيار الأفضل لإطار عمل PHP عالي الأداء وإدارة الخدمات المصغرة.
حوكمة خدمة أنيقة
توصي Swoft رسميًا بأن يستخدم المطورون أنماط شبكة الخدمة ، مثل إطار عمل Istio / Envoy ، لفصل حوكمة الأعمال والخدمات ، ولكن يوفر Swoft أيضًا مجموعة من مكونات الخدمات المصغرة للشركات الصغيرة والمتوسطة الحجم لإنشاء خدمات ميكروية بسرعة.
تسجيل الخدمة واكتشافها
لتسجيل الخدمة واكتشافها ، يكون مكون القنصل في swoft الذي توفره Swoft مطلوبًا ، إذا كانت أطراف ثالثة أخرى متشابهة.
خدمات التسجيل والإلغاء
استمع إلى حدث SwooleEvent::START
، سجّل الخدمة
class RegisterServiceListener implements EventHandlerInterface { private $agent; public function handle(EventInterface $event): void { $httpServer = $event->getTarget(); $service = [
استمع إلى حدث SwooleEvent::SHUTDOWN
، SwooleEvent::SHUTDOWN
بإلغاء الخدمة
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(); } }
اكتشاف الخدمة
تحديد مزود الخدمة
class RpcProvider implements ProviderInterface { private $agent; public function getList(Client $client): array {
مزود خدمة التكوين
return [ 'user' => [ 'class' => ServiceClient::class, 'provider' => bean(RpcProvider::class)
خدمة الكسارة
يستخدم @Breaker
التعليق التوضيحي @Breaker
لتحقيق ضربة ، والتي يمكن تفجيرها على أي طريقة.
class BreakerLogic { public function func(): string {
حد الخدمة
يستخدم @RateLimiter
التعليق التوضيحي @RateLimiter
لتطبيق التحكم في الخدمة ، والذي يمكن التحكم به بأي طريقة ، وليس فقط وحدة التحكم ، كما يدعم KEY لغة تعبير symfony / تعبير لغة التعبير.
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]; } }
مركز التكوين
يحتاج مركز التكوين إلى استخدام مكون Swoft-apollo المقدم من Swoft رسميًا ، إذا كانت الأطراف الثالثة الأخرى متشابهة.
أعلن وكيل
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(); } } }
بدء وكيل
يحتاج الوكيل فقط إلى التشغيل قبل بدء تشغيل الخدمة (Http / RPC / Websocket).
php bin/swoft agent:index
مورد