久久久久久久视色,久久电影免费精品,中文亚洲欧美乱码在线观看,在线免费播放AV片

<center id="vfaef"><input id="vfaef"><table id="vfaef"></table></input></center>

    <p id="vfaef"><kbd id="vfaef"></kbd></p>

    
    
    <pre id="vfaef"><u id="vfaef"></u></pre>

      <thead id="vfaef"><input id="vfaef"></input></thead>

    1. 站長(zhǎng)資訊網(wǎng)
      最全最豐富的資訊網(wǎng)站

      PHP之微服務(wù)協(xié)程框架Swoft

      PHP之微服務(wù)協(xié)程框架Swoft

      簡(jiǎn)介

        有了swoole這樣強(qiáng)大的擴(kuò)展之后,越來越多的框架都是基于swoole被開發(fā)出來,Swoft就是其中一款不錯(cuò)的PHP框架。Swoft 是一款基于 Swoole 原生協(xié)程的注解式框架,自帶常駐內(nèi)存以及 Swoole 其它功能的封裝。swoft中內(nèi)置了協(xié)程客戶端。同時(shí)swoft里面有了很多新的概念,比如Aop等。

        官網(wǎng)地址:https://www.swoft.org/

      使用Swoft框架注意事項(xiàng)

        因?yàn)镾woft是基于Swoole,所以和普通的PHP框架還是很不一樣的,有些是需要注意的。

        1.不要再代碼中執(zhí)行sleep()以及其他睡眠函數(shù),這樣會(huì)導(dǎo)致整個(gè)進(jìn)程阻塞。

        2.不要使用exit/die函數(shù),這樣會(huì)導(dǎo)致worker進(jìn)程直接退出。

        3.進(jìn)程隔離需要注意的,當(dāng)修改了全局變量的值,會(huì)不生效,因?yàn)槿肿兞吭诓煌倪M(jìn)程中,內(nèi)存空間是隔離的。使用Swoft框架需要了解進(jìn)程隔離問題。不同的進(jìn)程中PHP變量不是共享,即便是全局變量。如果不同的進(jìn)程需要共享數(shù)據(jù),可以使用Redis,Mysql,消息隊(duì)列,文件,Swoole/Table,APCu(php自帶的緩存擴(kuò)展),shmget(進(jìn)程通信(IPC)共享內(nèi)存)等工具。同時(shí)不同進(jìn)程的文件句柄也是隔離的,所以在A進(jìn)程創(chuàng)建的Socker連接打開的文件在B進(jìn)程內(nèi)是無效的。

        4.進(jìn)程克隆,當(dāng)server啟動(dòng)時(shí)候,主進(jìn)程會(huì)克隆當(dāng)前進(jìn)程狀態(tài),此后開始進(jìn)程內(nèi)的數(shù)據(jù)互相獨(dú)立,互不影響。

        5.不要再控制器寫基類來寫公共的變量,這樣會(huì)造成數(shù)據(jù)污染,當(dāng)下一個(gè)請(qǐng)求進(jìn)來依然會(huì)請(qǐng)求到這個(gè)變量,因?yàn)槌qv內(nèi)存并且單利所以不會(huì)釋放掉。

        官方文檔也有提示

      PHP之微服務(wù)協(xié)程框架Swoft

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

      Swoft框架安裝

        安裝環(huán)境要求:

          1. gcc版本大于等于4.8。

          2. PHP版本大于7.1。

          3. Composer包管理工具。

          4. 安裝Redis異步客戶端hiredis,在最新版本的Swoole4.2.6之后已經(jīng)內(nèi)置了,不需要安裝。

          5. Swoole擴(kuò)展,這個(gè)是必須的。

          6.鏈接迭代器依賴庫(kù)pcre。

          7. Swoole需要開啟協(xié)程和異步redis。

        安裝

      git clone https://github.com/swoft-cloud/swoft cd swoft composer install cp .env.example .env   #編輯 .env 文件,根據(jù)需要調(diào)整相關(guān)環(huán)境配置

      如果出現(xiàn)下面錯(cuò)誤說明redis擴(kuò)展沒有,因?yàn)閟woft需要redis擴(kuò)展。

      PHP之微服務(wù)協(xié)程框架Swoft

      當(dāng)然使用docker方式會(huì)更加簡(jiǎn)單,執(zhí)行下面命令

      docker run -p 18306:18306 --name swoft swoft/swoft
      PHP之微服務(wù)協(xié)程框架Swoft

      在瀏覽器中輸入 http://127.0.0.1:18306 就可以打開Swoft本地頁(yè)面。

      關(guān)閉和開啟運(yùn)行命令 docker start/stop swoft

      Swoft目錄及文件說明

      進(jìn)入容器查看swoft目錄

      PHP之微服務(wù)協(xié)程框架Swoft
      root@880c142615c3:/var/www/swoft# tree -L 2 . |-- CONTRIBUTING.md |-- Dockerfile |-- LICENSE |-- README.md |-- README.zh-CN.md |-- app                        #應(yīng)用目錄 |   |-- Annotation        #定義注解相關(guān)目錄|   |-- Application.php |   |-- Aspect |   |-- AutoLoader.php |   |-- Common |   |-- Console |   |-- Exception |   |-- Helper          #助手函數(shù)目錄 |   |-- Http |   |-- Listener         #事件監(jiān)聽器目錄|   |-- Migration |   |-- Model           #模型、邏輯等代碼目錄|   |-- Process |   |-- Rpc            #RPC服務(wù)代碼目錄|   |-- Task            #任務(wù)投遞管理目錄,這里可以做異步任務(wù)或者定時(shí)器的工作 |   |-- Tcp |   |-- Validator |   |-- WebSocket         #WebSocket服務(wù)代碼目錄|   `-- 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                   #應(yīng)用資源目錄|   |-- language |   `-- views |-- runtime             #臨時(shí)文件目錄(日志、上傳文件、文件緩存等)|   |-- logs |   |-- sessions |   |-- swoft.command |   `-- swoft.pid |-- test              #單元測(cè)試目錄    |   |-- 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
      PHP之微服務(wù)協(xié)程框架Swoft

      SwoftBean容器

         Bean容器是Swoft的核心,每一個(gè)Bean就是一個(gè)類對(duì)象的實(shí)例,容器就是一個(gè)工廠來存放和管理Bean。在HttpServer啟動(dòng)時(shí)候會(huì)掃描帶有@Bean注解的類。傳統(tǒng)的PHP是沒有常駐內(nèi)存的,每次請(qǐng)求都會(huì)重新初始化各種資源,每個(gè)對(duì)象也要重新實(shí)例化去申請(qǐng)內(nèi)存,處理完請(qǐng)求后又被消耗,十分浪費(fèi)資源。而Swoft在HttpServer啟動(dòng)后會(huì)將這些對(duì)象實(shí)例化并存放在內(nèi)存中,下次請(qǐng)求就直接取出使用,減少對(duì)象創(chuàng)建資源的消耗。

         Bean容器底層是一個(gè)BeanFactory管理容器(Container)。

      Swoft注解(Annotations)機(jī)制

      注解是Swoft里面很多重要功能特別是AOP,IoC容器的基礎(chǔ)。熟悉Java的朋友應(yīng)該更加了解注解?!?/p>

      那么注解是什么樣呢?下面是Swoft的一部分代碼,在類、方法或成員變量上方的注釋部分就有注解。

      PHP之微服務(wù)協(xié)程框架Swoft
      namespace AppTcpController;  use AppTcpMiddlewareDemoMiddleware; use SwoftTcpServerAnnotationMappingTcpController; use SwoftTcpServerAnnotationMappingTcpMapping; use SwoftTcpServerRequest; use SwoftTcpServerResponse; use function strrev;  /**  * Class DemoController  *  * @TcpController(middlewares={DemoMiddleware::class})      #這個(gè)就是注解  */ 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之微服務(wù)協(xié)程框架Swoft

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

          注解其實(shí)是通過反射把注釋當(dāng)成代碼的一部分,PHP可以通過ReflectionClass來獲取一個(gè)類的信息,從而了解類里的信息,比如獲取類中的所有方法、成員變量,并包括私有方法等,并根據(jù)這些信息實(shí)現(xiàn)一些操作。像很多PHP框架,比如laravel框架就利用PHP的反射機(jī)制來實(shí)現(xiàn)依賴注入。

          其實(shí)注解是配置的另一種方式,這里注解就可以起到一個(gè)配置作用。比如定義路由,定義配置定時(shí)任務(wù),權(quán)限控制等。

          在Swoft中要是使用注解,需引入相關(guān)注解(Annotation)類,且必須以 /** 開始并以 */ 結(jié)束,否則會(huì)導(dǎo)致無法解析!

      Aop切面編程

        Aop介紹

          1. Aspect(切面):通常是一個(gè)類,里面可以定義切入點(diǎn)和通知。

          2. JointPoint(連接點(diǎn)):程序執(zhí)行過程中明確的點(diǎn),一般是方法的調(diào)用。

          3. Advice(通知):Aop在特定的切入點(diǎn)執(zhí)行的增強(qiáng)處理,有before,after,afterReturning,afterThrowing,around。

          4. Pointcut(切入點(diǎn)):就是嗲有通知的連接點(diǎn),在程序中主要體現(xiàn)為書寫切入點(diǎn)表達(dá)式。

         Swoft新版的Aop設(shè)計(jì)建立在PHP Parser上面。

          PHP-Parser的項(xiàng)目主頁(yè)是:https://github.com/nikic/PHP-Parser

      推薦教程:《php教程》

      贊(0)
      分享到: 更多 (0)
      網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)