百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>网页制作> PHP之微办事协程框架Swoft
分享文章到:

PHP之微办事协程框架Swoft

发布时间:09/01 来源:未知 浏览: 关键词:

简介

  有了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
|   |-- Common
|   |-- 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.command
|   `-- 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 command: 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的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有153人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板