我使用webman并開啟協(xié)程(Workerman\Events\Swoole::class),使用1個進(jìn)程跑,我在support\Request上加了一個getRequestId()和_requestId()的方法,這樣每次請求進(jìn)來,就可以生成一個對應(yīng)的請求id(request_id),這樣我可以在日志上查找關(guān)于某個請求(request_id)究竟發(fā)生了什么事情,然后我做了以下測試(寫在后面),為何會有不同的結(jié)果?
namespace support;
/**
* Class Request
* @package support
*/
class Request extends \Webman\Http\Request
{
public function getRequestId(){
if(!isset($this->data['request_id'])){
$this->data['request_id']=self::_requestId();
}
return $this->data['request_id'];
}
private static function _requestId(){
//這里生成固定格式的xxxx-xxxxxxxx-xxxx-xxxx字符串
$characters = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
$randomPart = '';
$length = 20;
for ($i = 0; $i < $length; $i++) {
$randomPart .= $characters[rand(0, strlen($characters) - 1)];
}
$request_id = sprintf('%s-%s-%s-%s',
substr($randomPart, 0, 4),
substr($randomPart, 4, 8),
substr($randomPart, 12, 4),
substr($randomPart, 16, 4)
);
return $request_id;
}
}
namespace app\controller;
use support\Log;
class IndexController{
public function test(Request $request){
$log = Log::channel('log2');
$id = $request->get('id');
$log->useLoggingLoopDetection(false);//取消日志深度檢測
sleep(3);
$log->info($request->getRequestId().'請求進(jìn)來['.$id.']');
return json(array('ok5'));
}
}
1.1、通過網(wǎng)址方式刷新同一個url 10次(https://網(wǎng)址/test?id=0),log記錄如下,對應(yīng)的request_id全部都是同一個(A4YW-7LIEBMUC-NPPM-RY4V)
[2025-03-05 11:31:30]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:31:37]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:24]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:25]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:26]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:27]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:27]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:28]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:28]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
[2025-03-05 11:43:28]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[0]
(瀏覽器也沒有說長連接)
1.1、通過網(wǎng)址方式刷新同一個url,但不同的傳參(https://網(wǎng)址/test?id=xxx) 10次(id=1~10),log記錄如下,每一個請求的request_id都不一樣
[2025-03-05 11:53:13]log2.INFO: VTJD-9Y534GN6-7970-LCB6請求進(jìn)來[0]
[2025-03-05 11:54:18]log2.INFO: A4YW-7LIEBMUC-NPPM-RY4V請求進(jìn)來[1]
[2025-03-05 11:54:21]log2.INFO: MFAC-HMRQUSA9-XMOR-HBFO請求進(jìn)來[2]
[2025-03-05 11:55:05]log2.INFO: T95Q-12Q526TB-6P13-LM05請求進(jìn)來[3]
[2025-03-05 11:55:11]log2.INFO: KU9G-3DMFRHSE-188W-Q27P請求進(jìn)來[4]
[2025-03-05 11:55:13]log2.INFO: 6YP6-AYWWTF7J-DWD3-ZU1C請求進(jìn)來[5]
[2025-03-05 11:55:16]log2.INFO: TLVQ-B9YEOCUK-L829-J8FL請求進(jìn)來[6]
[2025-03-05 11:55:17]log2.INFO: AJVA-J0F9DAUT-W5Z3-PW0M請求進(jìn)來[7]
[2025-03-05 11:55:19]log2.INFO: XM02-KIGW5L6E-AB9I-IN23請求進(jìn)來[8]
[2025-03-05 11:55:22]log2.INFO: YQ7F-Y0ZRGNQQ-V05H-DR4B請求進(jìn)來[8]
[2025-03-05 11:55:23]log2.INFO: 9FN1-64QRUGPY-U8OV-M2RU請求進(jìn)來[9]
[2025-03-05 11:55:26]log2.INFO: DC6Y-K5WAXRFT-2F22-JMAY請求進(jìn)來[10]
2、通過php的異步請求方式(GuzzleHttp\Client、GuzzleHttp\Promise)請求10次
[2025-03-05 11:47:01] log2.INFO: EH1E-ULZO34ZF-P0PK-Y484請求進(jìn)來[1]
[2025-03-05 11:47:01] log2.INFO: GWC6-WX7IQOIW-7HAH-FN41請求進(jìn)來[4]
[2025-03-05 11:47:01] log2.INFO: TSI6-YI5HDMFC-U34A-5DO9請求進(jìn)來[3]
[2025-03-05 11:47:01] log2.INFO: 0OF3-NYRENBZM-IRP9-I8AA請求進(jìn)來[2]
[2025-03-05 11:47:01] log2.INFO: V002-5QEY865H-D4EF-KRJW請求進(jìn)來[5]
[2025-03-05 11:47:01] log2.INFO: SLM9-I8Y0B5GV-KN0J-QZCB請求進(jìn)來[7]
[2025-03-05 11:47:01] log2.INFO: 2BQ7-HXZN2RBK-BERA-9ZRI請求進(jìn)來[8]
[2025-03-05 11:47:01] log2.INFO: VOJG-4FWBYMD8-SGTH-VTWC請求進(jìn)來[6]
[2025-03-05 11:47:01] log2.INFO: LQ2N-LL6YZJV4-VNQ4-EP1M請求進(jìn)來[9]
[2025-03-05 11:47:01] log2.INFO: JPPW-CXY8O1ZU-HVTP-KCWN請求進(jìn)來[0]