PHP microservice framework — Swoft


    Swoft is a PHP high performance microservice coroutine framework. It has been published for many years and has become the best choice for php. It can be like Go, built-in coroutine web server and common coroutine client and is resident in memory, independent of traditional PHP-FPM. There are similar Go language operations, similar to the Spring Cloud framework flexible annotations.


    Github


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


    Feature


    Full Coroutine Framework


    Swoft is first PHP resident in memory annotation framework, with Spring Boot conventions larger than the configuration design concept, with a set of development specifications.


    AOP


    AOP is a object oriented programming that makes it easier to decouple business code, improve code quality, and increase code reusability.


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


    Http service is simple and flexible,only to use @Controller() and @RequestMapping(route="index") annotations to define service。


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

    Websocket service


    Swoft provides a complete Websocket for developers to quickly build service


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


    Swoft RPC can be called like a native function as 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];
        }
    }

    TCP Service


    Swoft also provides feature-rich TCP service support.


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

    Connection pool


    Swoft is simple to define a high-performance connection pool with like this:


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

    Compatible with Laravel ORM


    Swoft database is highly compatible with Laravel ORM, It's easy for PHP developer to use in 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();

    Microservice


    Swoft provides a set of quick build microservice governance components, it's easy for developers to use.


    • Service Registration and Discovery
    • Service Broker
    • Centralized Configuration
    • Service Throttling ability

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


    Share post
    AdBlock has stolen the banner, but banners are not teeth — they will be back

    More
    Ads

    Comments 5

      0

      I am sorry, but what это делает в Russian разделе?

        0
        It ok!
          +1
          MGIMO finished?
            0
            What is MGIMO?
        0
        — How much watch?
        — One watch.
        — Such much?
        — For whom how.
        — Petegorsk inyaz?
        — Ask.

        Only users with full accounts can post comments. Log in, please.