PHP之微服务协程框架Swoft-php教程

资源魔 38 0

简介

  有了swoole这样弱小的扩大之后,愈来愈多的框架都是基于swoole被开收回来,Swoft就是此中一款没有错的PHP框架。Swoft 是一款基于 Swoole 原生协程的注解式框架,自带常驻内存和 Swoole 其它性能的封装。swoft中内置了协程客户端。同时swoft外面有了不少新的概念,比方Aop等。

  官网地点:https://www.swoft.org/

应用Swoft框架留意事项

  由于Swoft是基于Swoole,以是以及一般的PHP框架仍是很纷歧样的,有些是需求留意的。

  1.没有要再代码中执行sleep()和其余就寝函数,这样会招致整个过程梗阻。

  2.没有要应用exit/die函数,这样会招致worker过程间接加入。

  3.过程隔离需求留意的,当修正了全局变量的值,会没有失效,由于全局变量正在没有同的过程中,内存空间是隔离的。应用Swoft框架需求理解过程隔离成绩。没有同的过程中PHP变量没有是同享,即使是全局变量。假如没有同的过程需求同享数据,能够应用Redis,Mysql,音讯行列步队,文件,Swoole/Table,APCu(php自带的缓存扩大),shmget(过程通讯(IPC)同享内存)等对象。同时没有同过程的文件句柄也是隔离的,以是正在A过程创立的Socker衔接关上的文件正在B过程内是有效的。

  4.过程克隆,当server启动时分,主过程会克隆以后过程状态,尔后开端过程内的数据相互自力,互没有影响。

  5.没有要再管制器写基类来写公共的变量,这样会造成数据净化,当下一个申请出去仍然会申请到这个变量,由于常驻内存而且单利以是没有会开释掉。

  民间文档也有提醒

https://www.swoft.org/documents/v2/dev-guide/dev-note/

Swoft框架装置

  装置环境要求:

    1. gcc版本年夜于等于4.8。

    2. PHP版本年夜于7.1。

    3. Composer担保理对象。

    4. 装置Redis异步客户端hiredis,正在最新版本的Swoole4.2.6之后曾经内置了,没有需求装置。

    5. Swoole扩大,这个是必需的。

    6.链接迭代器依赖库pcre。

    7. Swoole需求开启协程以及异步redis。

  装置

git clone https://github.com/swoft-cloud/swoft
cd swoft
composer install
cp .env.example .env   #编纂 .env 文件,依据需求调整相干环境设置装备摆设

假如呈现上面谬误阐明redis扩大不,由于swoft需求redis扩大。

当然应用docker形式会愈加简略,执行上面饬令

docker run -p 18306:18306 --name swoft swoft/swoft

正在阅读器中输出 http://127.0.0.1:18306 就能够关上Swoft内陆页面。

封闭以及开启运转饬令 docker start/stop swoft

Swoft目次及文件阐明

进入容器查看swoft目次

复制代码
root@880c142615c3:/var/www/swoft# tree -L 2
.
|-- CONTRIBUTING.md
|-- Dockerfile
|-- LICENSE
|-- README.md
|-- README.zh-CN.md
|-- app                        #使用目次
|   |-- Annotation        #界说注解相干目次|   |-- Application.php
|   |-- Aspect
|   |-- AutoLoader.php
|   |-- Co妹妹on
|   |-- Console
|   |-- Exception
|   |-- Helper          #助手函数量录
|   |-- Http
|   |-- Listener         #事情监听器目次|   |-- Migration
|   |-- Model           #模子、逻辑等代码目次|   |-- Process
|   |-- Rpc            #RPC效劳代码目次|   |-- Task            #义务送达治理目次,这里能够做异步义务或许按时器的工作
|   |-- Tcp
|   |-- Validator
|   |-- WebSocket         #WebSocket效劳代码目次|   `-- bean.php
|-- bin
|   |-- bootstrap.php
|   `-- swoft            #Swoft入口文件|-- composer.cn.json
|-- composer.json
|-- composer.lock
|-- config
|   |-- base.php
|   |-- db.php
|   `-- dev
|-- database
|   |-- AutoLoader.php
|   `-- Migration
|-- dev.composer.json
|-- docker-compose.yml
|-- phpstan.neon.dist
|-- phpunit.xml
|-- public
|   |-- favicon.ico
|   `-- image
|-- resource                   #使用资本目次|   |-- language
|   `-- views
|-- runtime             #暂时文件目次(日记、上传文件、文件缓存等)|   |-- logs
|   |-- sessions
|   |-- swoft.co妹妹and
|   `-- swoft.pid
|-- test              #单位测试目次   
|   |-- apitest
|   |-- bootstrap.php
|   |-- run.php
|   |-- testing
|   `-- unit
`-- vendor
    |-- autoload.php
    |-- bin
    |-- composer
    |-- doctrine
    |-- monolog
    |-- myclabs
    |-- nikic
    |-- phar-io
    |-- php-di
    |-- phpdocumentor
    |-- phpoption
    |-- phpspec
    |-- phpunit
    |-- psr
    |-- sebastian
    |-- swoft
    |-- symfony
    |-- text
    |-- theseer
    |-- toolkit
    |-- vlucas
    `-- webmozart
复制代码

SwoftBean容器

   Bean容器是Swoft的外围,每个Bean就是一个类工具的实例,容器就是一个工场来寄存以及治理Bean。正在HttpServer启动时分会扫描带有@Bean注解的类。传统的PHP是不常驻内存的,每一次申请城市从新初始化各类资本,每一个工具也要从新实例化去请求内存,解决完申请后又被耗费,非常糜费资本。而Swoft正在HttpServer启动后会将这些工具实例化并寄存正在内存中,下次申请就间接掏出应用,缩小工具创立资本的耗费。

   Bean容器底层是一个BeanFactory治理容器(Container)。

Swoft注解(Annotations)机制

注解是Swoft外面不少首要性能特地是AOP,IoC容器的根底。相熟Java的冤家应该愈加理解注解。 

那末注解是甚么样呢?上面是Swoft的一局部代码正在类、办法或成员变量上方的正文局部就有注解。

复制代码
namespace App\Tcp\Controller;

use App\Tcp\Middleware\DemoMiddleware;
use Swoft\Tcp\Server\Annotation\Mapping\TcpController;
use Swoft\Tcp\Server\Annotation\Mapping\TcpMapping;
use Swoft\Tcp\Server\Request;
use Swoft\Tcp\Server\Response;
use function strrev;

/**
 * Class DemoController
 *
 * @TcpController(middlewares={DemoMiddleware::class})      #这个就是注解
 */
class DemoController
{
    /**
     * @TcpMapping("list", root=true)
     * @param Response $response
     */
    public function list(Response $response): void
    {
        $response->setData('[list]allow co妹妹and: list, echo, demo.echo');
    }
复制代码

  注解是甚么呢?有甚么作用呢?

    注解实际上是经过反射把正文当成代码的一局部,PHP能够经过ReflectionClass来猎取一个类的信息,从而理解类里的信息,比方猎取类中的一切办法、成员变量,并包罗公有办法等,并依据这些信息完成一些操作。像不少PHP框架,比方laravel框架就行使PHP的反射机制来完成依赖注入。

    其实注解是设置装备摆设的另外一种形式,这里注解就能够起到一个设置装备摆设作用。比方界说路由,界说设置装备摆设按时义务,权限管制等。

    正在Swoft中要是应用注解,需引入相干注解(Annotation)类,且必需以 /** 开端并以 */ 完结,不然会招致无奈解析!

Aop切面编程

  Aop引见

    1. Aspect(切面):一般为一个类,外面能够界说切入点以及告诉。

    2. JointPoint(衔接点):顺序执行进程中明白的点,普通是办法的挪用。

    3. Advice(告诉):Aop正在特定的切入点执行的加强解决,有before,after,afterReturning,afterThrowing,around。

    4. Pointcut(切入点):就是嗲有告诉的衔接点,正在顺序中次要表现为书写切入点表白式。

   Swoft新版的Aop设计建设正在PHP Parser下面。

    PHP-Parser的名目主页是:https://github.com/nikic/PHP-Parser

保举教程:《php教程》

以上就是PHP之微效劳协程框架Swoft的具体内容,更多请存眷资源魔其它相干文章!

标签: php开发教程 php开发资料 php开发自学 PHP应用

抱歉,评论功能暂时关闭!