国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

關(guān)于中間件向控制器傳參的問(wèn)題

dgkerry

問(wèn)題描述

在使用webman做項(xiàng)目時(shí)發(fā)現(xiàn)一個(gè)關(guān)于中間件向控制器傳參數(shù)的問(wèn)題,根據(jù)文檔的提示(通過(guò)給$request對(duì)象添加屬性的方式向控制器傳參),在中間件中我設(shè)置了一個(gè)請(qǐng)求id(request_id)(為了可以對(duì)比,我使用了Context儲(chǔ)存了request_id),然后在控制器中讀取它,我特意在中間件穿越前輸出到日志,并在控制器上使用Context讀取其值,與$request->request_id作比較并寫(xiě)入日志。

備注:我開(kāi)啟協(xié)程Workerman\Events\Swoole::class、1進(jìn)程下

我通過(guò)linux的ab命令來(lái)并發(fā)10次請(qǐng)求,并在在下面日志中我發(fā)現(xiàn)個(gè)別現(xiàn)象:
格式:Context的值【控制器讀取數(shù)據(jù)】:$request->request_id的值
1、[2025-04-01 15:21:21] log2.INFO: 0GNY-68VM190J-9LBQIC2C-6F26控制器讀取數(shù)據(jù):0GNY-68VM190J-9LBQIC2C-6F26 [] []
2、[2025-04-01 15:21:21] log2.INFO: UUO1-LPHP5MEX-YXWUYKLB-CVBQ控制器讀取數(shù)據(jù):YDD1-O83MEIWR-V7O4NYKJ-7S38 [] []
3、[2025-04-01 15:21:21] log2.INFO: 4LB9-UQRMO1BE-0NWGQZ6R-IPJ1控制器讀取數(shù)據(jù): [] []

其中【1】就是我想要的結(jié)果,$request->request_id跟Context的request_id一致
其中【2、3】就是我想不到為何會(huì)出現(xiàn)這樣結(jié)果,【2】$request->request_id跟Context的request_id不一致,【3】$request->request_id為空

中間件代碼

<?php
namespace app\middleware;
use Webman\MiddlewareInterface;
use Webman\Http\Response;
use Webman\Http\Request;
use support\Context;
use support\Log;
class GolbalRequest implements MiddlewareInterface{
    public function process(Request $request, callable $handler) : Response
    {
        $request_id = generateRequestId();
        $request->request_id=$request_id;
        Context::set('request_id',$request_id);
        $log=Log::Channel('log2');
        $log->useLoggingLoopDetection(false);
        $log->info('請(qǐng)求開(kāi)始,獲取request_id:'.$request_id);
        $response = $handler($request); // 繼續(xù)向洋蔥芯穿越,直至執(zhí)行控制器得到響應(yīng)

        return $response;
    }
}
?>

控制器代碼

<?php

namespace app\bot\controller;

use support\Request;
class IndexController
{
    public function index(Request $request)
    {
        $request_id=Context::get('request_id');
        $log=Log::Channel('log2');
        $log->info($request_id.'控制器讀取數(shù)據(jù):'.$request->request_id);
    }
}

系列保存的日志記錄

[2025-04-01 15:21:20] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:0GNY-68VM190J-9LBQIC2C-6F26 [] []
[2025-04-01 15:21:21] log2.INFO: 0GNY-68VM190J-9LBQIC2C-6F26控制器讀取數(shù)據(jù):0GNY-68VM190J-9LBQIC2C-6F26 [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:UUO1-LPHP5MEX-YXWUYKLB-CVBQ [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:UIX9-JG2U37UN-WPAJ86VD-X3SO [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:4LB9-UQRMO1BE-0NWGQZ 6R-IPJ1 [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:YDD1-O83MEIWR-V7O4NYKJ-7S38 [] []
[2025-04-01 15:21:21] log2.INFO: UUO1-LPHP5MEX-YXWUYKLB-CVBQ控制器讀取數(shù)據(jù):YDD1-O83MEIWR-V7O4NYKJ-7S38 [] []
[2025-04-01 15:21:21] log2.INFO: UIX9-JG2U37UN-WPAJ86VD-X3SO控制器讀取數(shù)據(jù):YDD1-O83MEIWR-V7O4NYKJ-7S38 [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:35GW-YOAICD9R-7MVSV6EK-E7WN [] []
[2025-04-01 15:21:21] log2.INFO: 4LB9-UQRMO1BE-0NWGQZ6R-IPJ1控制器讀取數(shù)據(jù): [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:7U3D-TT0Q1GKC-9K31DU9X-SPDO [] []
[2025-04-01 15:21:21] log2.INFO: YDD1-O83MEIWR-V7O4NYKJ-7S38控制器讀取數(shù)據(jù): [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:K64C-U12411DA-JX4SXOEH-X7M5 [] []
[2025-04-01 15:21:21] log2.INFO: 35GW-YOAICD9R-7MVSV6EK-E7WN控制器讀取數(shù)據(jù): [] []
[2025-04-01 15:21:21] log2.INFO: 7U3D-TT0Q1GKC-9K31DU9X-SPDO控制器讀取數(shù)據(jù):7U3D-TT0Q1GKC-9K31DU9X-SPDO [] []
[2025-04-01 15:21:21] log2.INFO: K64C-U12411DA-JX4SXOEH-X7M5控制器讀取數(shù)據(jù):K64C-U12411DA-JX4SXOEH-X7M5 [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:79K2-1JG1EG36-0J0YOMZ1-VYJ9 [] []
[2025-04-01 15:21:21] log2.INFO: 79K2-1JG1EG36-0J0YOMZ1-VYJ9控制器讀取數(shù)據(jù):79K2-1JG1EG36-0J0YOMZ1-VYJ9 [] []
[2025-04-01 15:21:21] log2.INFO: 請(qǐng)求開(kāi)始,獲取request_id:9IO7-FT6CVZXQ-0Z3PRCGX-N9JM [] []
[2025-04-01 15:21:21] log2.INFO: 9IO7-FT6CVZXQ-0Z3PRCGX-N9JM控制器讀取數(shù)據(jù):9IO7-FT6CVZXQ-0Z3PRCGX-N9JM [] []

操作系統(tǒng)環(huán)境及workerman/webman等具體版本

linux系統(tǒng)
composer.json參數(shù):
"php": ">=8.1",
"workerman/webman-framework": "^2.1",
"monolog/monolog": "^2.0",

寫(xiě)在后面

除了上面問(wèn)題,關(guān)于Request類我最近有一個(gè)疑問(wèn),就是開(kāi)啟協(xié)程后,此時(shí)的Request類是是不是本次請(qǐng)求的局部變量,還是在一個(gè)進(jìn)程中的全局變量?并發(fā)的時(shí)候,Request類的屬性會(huì)不會(huì)被其他(同進(jìn)程)請(qǐng)求所覆蓋?文檔好似沒(méi)有關(guān)于這方面的描述,有沒(méi)有大佬解釋一下?

566 3 1
3個(gè)回答

nitron

1.約等于全局
2.只要不是直接修改$request就不會(huì)覆蓋,協(xié)程內(nèi)上下文傳遞請(qǐng)用Context

  • 暫無(wú)評(píng)論
walkor 打賞

試下dev版本是否有問(wèn)題

composer require workerman/workerman:dev-master
  • dgkerry 2025-04-07

    也是一樣,還是有問(wèn)題,我測(cè)試了2天,這幾天有空我把測(cè)試的結(jié)果整理下再發(fā)一篇文章

  • walkor 2025-04-07

    更新到 5.1.1 試下,前幾天剛發(fā)的版本

中間件保留參數(shù),應(yīng)該在request對(duì)象中設(shè)置。這樣可以保證你處理數(shù)據(jù)的時(shí)候,確認(rèn)你依舊在request所在的協(xié)程當(dāng)中。

  • 暫無(wú)評(píng)論
??