亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频

控制器

功能介紹

毫無(wú)疑問(wèn),控制器層是負(fù)責(zé)處理客戶(hù)端請(qǐng)求,轉(zhuǎn)發(fā)給響應(yīng)模型,并將結(jié)果返回給客戶(hù)端。EasySwoole 使用了對(duì)象池復(fù)用模式,降低對(duì)象創(chuàng)建、銷(xiāo)毀的開(kāi)銷(xiāo),注入 requestresponse 對(duì)象來(lái)完成客戶(hù)端與服務(wù)端之間的交互。

示例

App/HttpController/ 目錄下增加文件 User.php

代碼

<?php
/**
 * @CreateTime:   2020/8/19 12:30 上午
 * @Author:       huizhang  <2788828128@qq.com>
 * @Copyright:    copyright(2020) Easyswoole all rights reserved
 * @Description:  用戶(hù)控制器
 */
namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;

class User extends Controller
{

    /**
     * 用戶(hù)信息
     *
     * @return string
     * CreateTime: 2020/8/19 12:37 上午
     */
    public function userInfo()
    {
        // 獲取 get 參數(shù)
        $name = $this->request()->getQueryParam('name');

        // 輸出到終端
        var_dump($name);

        // 返回給客戶(hù)端
        $this->response()->write($name . PHP_EOL);

        // return 返回的值會(huì)讓框架在此進(jìn)行控制器方法調(diào)度,將繼續(xù)執(zhí)行 User 控制器類(lèi)的 requestTotal 方法 
        return '/User/requestTotal';
    }

    /**
     * 接口請(qǐng)求量
     *
     * CreateTime: 2020/8/19 12:37 上午
     */
    public function requestTotal()
    {
        $this->response()->write('請(qǐng)求數(shù)+1' . PHP_EOL);

        // 還可以 return,但不要兩個(gè)方法互相調(diào)用,會(huì)導(dǎo)致死循環(huán)
    }

    /**
     * 此控制器拋異常時(shí)會(huì)執(zhí)行此方法
     *
     * @param \Throwable $throwable
     * @throws \Throwable
     * CreateTime: 2020/8/19 12:48 上午
     */
    public function onException(\Throwable $throwable): void
    {
        parent::onException($throwable); // TODO: Change the autogenerated stub
    }

    /**
     * gc 方法將在執(zhí)行完 afterAction 方法之后自動(dòng)調(diào)用,可自行覆蓋實(shí)現(xiàn)其他的 gc 回收邏輯
     *
     * CreateTime: 2020/8/19 12:52 上午
     */
    public function gc()
    {
        parent::gc(); // TODO: Change the autogenerated stub
    }

    /**
     * 當(dāng)控制器方法執(zhí)行結(jié)束之后將調(diào)用該方法,可自行覆蓋該方法實(shí)現(xiàn)數(shù)據(jù)回收等邏輯
     *
     * @param string|null $actionName
     * CreateTime: 2020/8/19 12:51 上午
     */
    public function afterAction(?string $actionName): void
    {
        parent::afterAction($actionName); // TODO: Change the autogenerated stub
    }

    /**
     * 當(dāng)請(qǐng)求方法未找到時(shí),自動(dòng)調(diào)用該方法,可自行覆蓋該方法實(shí)現(xiàn)自己的邏輯
     *
     * @param string|null $action
     * CreateTime: 2020/8/19 12:51 上午
     */
    public function actionNotFound(?string $action)
    {
        parent::actionNotFound($action); // TODO: Change the autogenerated stub
    }

    /**
     * 所有控制器請(qǐng)求都會(huì)先經(jīng)過(guò)該方法,如果此方法返回 false 則請(qǐng)求不繼續(xù)往下執(zhí)行,可用于權(quán)限驗(yàn)證
     *
     * @param string|null $action
     * @return bool|null
     * CreateTime: 2020/8/19 12:52 上午
     */
    public function onRequest(?string $action): ?bool
    {
        return parent::onRequest($action); // TODO: Change the autogenerated stub
    }

}

執(zhí)行過(guò)程

啟動(dòng) easyswoole

php easyswoole.php server start

訪問(wèn)

curl http://localhost:9501/user/userInfo?name=easyswoole

執(zhí)行結(jié)果

服務(wù)端輸出

?  doc-new git:(master) ? php easyswoole.php server start
#!/usr/bin/env php
  ______                          _____                              _
 |  ____|                        / ____|                            | |
 | |__      __ _   ___   _   _  | (___   __      __   ___     ___   | |   ___
 |  __|    / _` | / __| | | | |  \___ \  \ \ /\ / /  / _ \   / _ \  | |  / _ \
 | |____  | (_| | \__ \ | |_| |  ____) |  \ V  V /  | (_) | | (_) | | | |  __/
 |______|  \__,_| |___/  \__, | |_____/    \_/\_/    \___/   \___/  |_|  \___|
                          __/ |
                         |___/

main server                   SWOOLE_WEB
listen address                0.0.0.0
listen port                   9501
worker_num                    8
reload_async                  true
max_wait_time                 3
document_root                 /Users/guoyuzhao/sites/doc-new/Static
enable_static_handler         true
pid_file                      /Users/guoyuzhao/sites/doc-new/Temp/pid.pid
log_file                      /Users/guoyuzhao/sites/doc-new/Log/swoole.log
user                          guoyuzhao
swoole version                4.5.2
php version                   7.4.8
easyswoole version            3.4.0-dev
run mode                      dev
temp dir                      /Users/guoyuzhao/sites/doc-new/Temp
log dir                       /Users/guoyuzhao/sites/doc-new/Log
string(10) "easyswoole"

客戶(hù)端輸出

?  ssh curl http://localhost:9501/user/userInfo\?name\=easyswoole

easyswoole
請(qǐng)求數(shù)+1

控制器方法

easyswoole 在控制器基類(lèi)中實(shí)現(xiàn)了幾個(gè)通用方法,當(dāng)然用戶(hù)也可根據(jù)需要進(jìn)行方法重寫(xiě)實(shí)現(xiàn)自己的邏輯

onRequest

所有控制器請(qǐng)求都會(huì)先經(jīng)過(guò)該方法,如果此方法返回 false 則請(qǐng)求不繼續(xù)往下執(zhí)行,可用于權(quán)限驗(yàn)證

protected function onRequest(?string $action): ?bool
{
    return true;
}

onException

當(dāng)執(zhí)行控制器方法拋異常時(shí)會(huì)調(diào)用該方法,可自行覆蓋該方法實(shí)現(xiàn)異常捕獲等邏輯

protected function onException(\Throwable $throwable): void
{
    throw $throwable;
}

afterAction

當(dāng) action 執(zhí)行結(jié)束后調(diào)用該方法,可自行覆蓋該方法實(shí)現(xiàn)數(shù)據(jù)回收等邏輯

protected function afterAction(?string $actionName): void
{

}

actionNotFound

當(dāng)請(qǐng)求方法未找到時(shí),自動(dòng)調(diào)用此方法

protected function actionNotFound(?string $action)
{
    $class = static::class;
    $this->writeJson(\EasySwoole\Http\Message\Status::CODE_NOT_FOUND,null,"{$class} has not action for {$action}");
}

gc

gc 方法在 afterAction 方法執(zhí)行完后調(diào)用

protected function gc()
{
    //恢復(fù)默認(rèn)值
    foreach ($this->defaultProperties as $property => $value) {
        $this->{$property} = $value;
    }
}

注意事項(xiàng)

  • 只有第一次請(qǐng)求時(shí)才會(huì)調(diào)用構(gòu)造函數(shù)
  • 對(duì)象池模式只重置非靜態(tài) public 屬性
  • 對(duì)象池復(fù)用模式只針對(duì)單一進(jìn)程,多個(gè) worker 進(jìn)程不共享
  • 文件夾、文件、類(lèi)名為大駝峰,變量與類(lèi)方法小駝峰(規(guī)范)
  • action 返回的字符串將會(huì)被 url 解析規(guī)則以及 route 路由規(guī)則解析
  • 兩個(gè) actionreturn 不能互相調(diào)用,否則將導(dǎo)致死循環(huán)

另外注意:在控制器類(lèi)的方法(onRequest/action 等方法)中創(chuàng)建子協(xié)程,在子協(xié)程中使用 $this 的相關(guān)屬性值時(shí)必須使用 use 引入,不使用 use 引入時(shí)將導(dǎo)致協(xié)程上下文數(shù)據(jù)錯(cuò)亂。

錯(cuò)誤使用示例:

下面以在 Index 控制器類(lèi)中的 action(index) 中使用為示例:

<?php
/**
 * This file is part of EasySwoole.
 *
 * @link http://www.b3f21.cn
 * @document http://www.b3f21.cn
 * @contact http://www.b3f21.cn/Preface/contact.html
 * @license https://github.com/easy-swoole/easyswoole/blob/3.x/LICENSE
 */

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Utility\Random;

class Index extends Controller
{
    public function index()
    {
        // 設(shè)置請(qǐng)求標(biāo)識(shí)
        $requestFlag = Random::number(3);
        $this->request()->withAttribute('requestFlag', $requestFlag);
        $rq = '第 ' . $this->request()->getRequestParam('times') . ' 次請(qǐng)求:';
        var_dump($rq . $this->request()->getAttribute('requestFlag'));
        go(function () {
            $rq = '第 ' . $this->request()->getRequestParam('times') . ' 次請(qǐng)求:';
            go(function () {
                $rq = '第 ' . $this->request()->getRequestParam('times') . ' 次請(qǐng)求:';
                \co::sleep(2);
                var_dump($rq . $this->request()->getAttribute('requestFlag'));
            });
            \co::sleep(4);
            // 【這里的數(shù)據(jù)會(huì)錯(cuò)亂】
            var_dump($rq . $this->request()->getAttribute('requestFlag'));
        });
        $this->response()->write('this is index!' . $this->request()->getRequestParam('times'));
    }
}

然后我們?cè)L問(wèn) http://127.0.0.1:9501/?times=1(示例請(qǐng)求地址),隔 1s 后我們?cè)俅卧L問(wèn) http://127.0.0.1:9501/?times=2(示例請(qǐng)求地址),發(fā)現(xiàn)出現(xiàn)如下運(yùn)行結(jié)果,控制臺(tái)輸出結(jié)果:

string(21) "第 1 次請(qǐng)求:765"
string(21) "第 1 次請(qǐng)求:765"
string(21) "第 2 次請(qǐng)求:823"
string(21) "第 1 次請(qǐng)求:823"
string(21) "第 2 次請(qǐng)求:823"
string(21) "第 2 次請(qǐng)求:823"

發(fā)現(xiàn)和我們想象中的完全不一樣,第 1 次請(qǐng)求掛載的數(shù)據(jù)被“污染”了,因?yàn)?EasySwoole 控制器采用的是對(duì)象池模式。

正確使用方式如下:

<?php
/**
 * This file is part of EasySwoole.
 *
 * @link http://www.b3f21.cn
 * @document http://www.b3f21.cn
 * @contact http://www.b3f21.cn/Preface/contact.html
 * @license https://github.com/easy-swoole/easyswoole/blob/3.x/LICENSE
 */

namespace App\HttpController;

use EasySwoole\Http\AbstractInterface\Controller;
use EasySwoole\Utility\Random;

class Index extends Controller
{
    public function index()
    {
        // 設(shè)置請(qǐng)求標(biāo)識(shí)
        $requestFlag = Random::number(3);
        $this->request()->withAttribute('requestFlag', $requestFlag);
        $rq = '第 ' . $this->request()->getRequestParam('times') . ' 次請(qǐng)求:';
        var_dump($rq . $this->request()->getAttribute('requestFlag'));
        go(function () use ($rq, $requestFlag) {
            go(function () use ($rq, $requestFlag) {
                \co::sleep(2);
                var_dump($rq . $requestFlag);
            });
            \co::sleep(4);
            // 【這里的數(shù)據(jù)會(huì)錯(cuò)亂】
            var_dump($rq . $requestFlag);
        });
        $this->response()->write('this is index!' . $this->request()->getRequestParam('times'));
    }
}

然后我們?cè)L問(wèn) http://127.0.0.1:9501/?times=1(示例請(qǐng)求地址),隔 1s 后我們?cè)俅卧L問(wèn) http://127.0.0.1:9501/?times=2(示例請(qǐng)求地址),發(fā)現(xiàn)出現(xiàn)如下運(yùn)行結(jié)果,控制臺(tái)輸出結(jié)果:

string(21) "第 1 次請(qǐng)求:690"
string(21) "第 1 次請(qǐng)求:690"
string(21) "第 2 次請(qǐng)求:820"
string(21) "第 1 次請(qǐng)求:690"
string(21) "第 2 次請(qǐng)求:820"
string(21) "第 2 次請(qǐng)求:820"

發(fā)現(xiàn)數(shù)據(jù)正常了。

亚洲精品成人_精品成人一区_999视频在线播放_免费黄色在线_亚洲成人久久久_久久www免费视频
  • <kbd id="eqi2k"><code id="eqi2k"></code></kbd><cite id="eqi2k"><tbody id="eqi2k"></tbody></cite>
    亚洲欧美99| 日韩精彩视频| 亚洲精品精选| 一本色道久久综合亚洲精品不| 一区二区精品国产| 草莓视频一区| 亚洲精品一区二区三| 亚洲黄色一区| 久久精品99久久| 亚洲视频一区| 国产精品三区www17con| 在线不卡视频一区二区| 国产精品免费一区二区三区观看 | 亚洲影院一区| 韩国精品一区二区三区六区色诱| 亚洲成人自拍| 亚洲影院一区| 亚洲精品9999| 欧美专区18| 夜夜爽www精品| 久久久999| 在线观看成人av| av一区二区在线看| 午夜国产精品视频| 国产精品视频在线免费观看 | 成人女人免费毛片| 亚洲精品不卡| 97伦理在线四区| 欧美日韩精品免费观看视一区二区 | 国产视频一区欧美| 热舞福利精品大尺度视频| 99亚洲一区二区| 亚洲一区二区三区色| 美女黄色成人网| 欧美激情一级片一区二区| 成人性色av| 99精品视频免费| 亚洲欧美久久久久一区二区三区| 51精品国产人成在线观看 | 翔田千里亚洲一二三区| 免费亚洲一区| 国内揄拍国内精品久久| 久久大片网站| 久久夜色精品| 日韩午夜电影| 国内精品久久久久久久影视麻豆 | 操人视频欧美| 99伊人成综合| 欧美日韩99| 日韩av图片| 九九九九精品| 国产一区二区三区四区五区加勒比 | 风间由美久久久| 国产精品美女久久久| 欧美性久久久| 在线观看成人av电影| 亚洲春色在线视频| 日韩精品一线二线三线| 六十路精品视频| 精品一区二区三区日本| 国产欧美日韩一区| 成人资源av| 草莓视频一区| 新67194成人永久网站| 国产亚洲欧美一区二区| aa国产精品| 一本不卡影院| 国产日韩在线一区二区三区| 激情自拍一区| 一本久道综合久久精品| 9久re热视频在线精品| 亚洲少妇在线| 久久久999| 国产精品免费观看高清| 久久久久免费网| 欧洲精品码一区二区三区免费看| 欧美色欧美亚洲另类七区| 欧美日韩综合精品| 亚洲一区二区免费视频软件合集| 亚洲一区二区三区乱码| 亚洲午夜精品一区二区| 在线亚洲欧美| 丁香五月网久久综合| 国产精品一区视频网站| 久久综合福利| 一区二区三区观看| 亚洲精选久久| 51成人做爰www免费看网站| 国产精品自拍首页| 日韩欧美在线电影| 黄色工厂这里只有精品| 国产欧美亚洲日本| 成人永久免费| 亚洲一区二区在线看| 99精品热6080yy久久| 六月婷婷久久| 日本不卡免费新一二三区| 在线观看日韩片| 日韩一级网站| 国产一区精品在线| 中文字幕不卡每日更新1区2区| 激情视频一区二区| 不卡视频一区二区| 色99中文字幕| 国产精品久久久久9999高清| 精品乱子伦一区二区三区| 欧美大片一区| 久久久久久久久一区二区| 欧美日韩大片一区二区三区 | 亚洲激情在线| 99精品国产一区二区| 婷婷久久伊人| 久久精品人人做人人爽电影蜜月| 精品国产一区二区三区麻豆免费观看完整版 | 模特精品在线| 亚洲国产精品综合| 噜噜噜在线观看免费视频日韩 | 国内自拍视频一区二区三区| 91久久极品少妇xxxxⅹ软件| 亚洲人成77777| 久久福利精品| 欧美aⅴ99久久黑人专区| 成人黄色在线免费观看| 欧美激情视频一区二区三区在线播放| 西西人体一区二区| 欧美在线视频一区二区三区| 不卡视频一区二区| 在线观看欧美亚洲| 鲁丝一区二区三区免费| 一本一本a久久| 亚洲视频精品一区| 国产亚洲欧美另类一区二区三区| 亚洲国产免费看| 视频一区三区| 久久精品日韩精品| 久久精品一区二区国产| 伊人久久亚洲热| 亚洲欧美日韩不卡一区二区三区| 国产精品一区二区三区免费| 国产精品日韩欧美一区二区三区| 在线一区亚洲| 欧美午夜免费| 好吊色欧美一区二区三区视频 | 一区国产精品| 欧美日韩一区二区三区免费| 亚洲女同在线| 宅男噜噜噜66一区二区| 国产精品av久久久久久麻豆网| 欧洲高清一区二区| 国产一区自拍视频| 91精品国产综合久久久久久丝袜| 精品成人在线| 国产一区日韩一区| 欧美大片一区| 欧美一区国产一区| 亚洲国产精品视频一区| 欧美国产二区| 欧美精品欧美精品| 欧美日韩一区在线播放| 久久久久一区二区三区| 久久久久se| 久久爱av电影| 欧美日韩国产精品一卡| 欧美在线播放一区二区| 欧美xxxx黑人又粗又长密月| 国偷自产av一区二区三区小尤奈| 国产精品免费在线| 国产精品免费在线播放| 国产嫩草一区二区三区在线观看| 国产精品果冻传媒潘| 国产乱码精品一区二区三区不卡| 国产精品v欧美精品∨日韩| 老司机免费视频久久| 91九色蝌蚪成人| 精品婷婷色一区二区三区蜜桃| 精品久久久久久一区| 日本最新一区二区三区视频观看| 欧美一级二级三级九九九| 日本高清一区| 欧美极品一区| 中文亚洲欧美| 国产高清在线精品一区二区三区| 狠狠色综合欧美激情| 亚洲精品一区二区三区四区五区| 一级做a爰片久久| 一区在线播放| 亚洲一区观看| 精品久久久久久乱码天堂| 热re99久久精品国产99热| 中文字幕99| 免费亚洲婷婷| 秋霞久久久久久一区二区| 国产综合亚洲精品一区二| 亚洲中字在线| 久久免费99精品久久久久久| 在线观看精品视频| 久久精品盗摄| 欧美精彩一区二区三区| 欧美日韩1区2区3区| 3d精品h动漫啪啪一区二区|