afterRequest 事件(即請(qǐng)求方法結(jié)束后執(zhí)行事件)
使用場(chǎng)景及原理
該事件是在請(qǐng)求方法結(jié)束后執(zhí)行。可以在該事件中做 trace
,對(duì)請(qǐng)求進(jìn)行追蹤監(jiān)視以及獲取此次的響應(yīng)內(nèi)容。
使用方式說(shuō)明
框架對(duì) afterRequest
事件的實(shí)現(xiàn)在 3.4.x 及以后的版本
中做了新的改動(dòng),實(shí)現(xiàn)方式由原來(lái)舊版本在主服務(wù)創(chuàng)建事件(mainServerCreate 事件
)中定義改變?yōu)樵?initialize 事件 中使用 Di
方式注入。目前最新穩(wěn)定版本框架(3.4.x
),具體實(shí)現(xiàn)及使用方式 (在 EasySwooleEvent.php
中的 initialize
事件中注入) 如下:
<?php
namespace EasySwoole\EasySwoole;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\EasySwoole\Swoole\EventRegister;
class EasySwooleEvent implements Event
{
public static function initialize()
{
date_default_timezone_set('Asia/Shanghai');
// 實(shí)現(xiàn) afterRequest 事件
\EasySwoole\Component\Di::getInstance()->set(\EasySwoole\EasySwoole\SysConst::HTTP_GLOBAL_AFTER_REQUEST, function (\EasySwoole\Http\Request $request, \EasySwoole\Http\Response $response): void {
// 示例:獲取此次請(qǐng)求響應(yīng)的內(nèi)容
TrackerManager::getInstance()->getTracker()->endPoint('request');
$responseMsg = $response->getBody()->__toString();
Logger::getInstance()->console('響應(yīng)內(nèi)容:' . $responseMsg);
// 響應(yīng)狀態(tài)碼:
// var_dump($response->getStatusCode());
// tracker 結(jié)束,結(jié)束之后,能看到中途設(shè)置的參數(shù),調(diào)用棧的運(yùn)行情況
TrackerManager::getInstance()->closeTracker();
});
}
public static function mainServerCreate(EventRegister $register)
{
}
}
舊版本(3.4.x
之前版本)框架的 afterRequest
事件的實(shí)現(xiàn)如下所示:
<?php
namespace EasySwoole\EasySwoole;
use EasySwoole\EasySwoole\Swoole\EventRegister;
use EasySwoole\EasySwoole\AbstractInterface\Event;
use EasySwoole\Http\Request;
use EasySwoole\Http\Response;
class EasySwooleEvent implements Event
{
public static function initialize()
{
// TODO: Implement initialize() method.
date_default_timezone_set('Asia/Shanghai');
}
public static function mainServerCreate(EventRegister $register)
{
// TODO: Implement mainServerCreate() method.
}
public static function onRequest(Request $request, Response $response): bool
{
// TODO: Implement onRequest() method.
return true;
}
// 注冊(cè) afterRequest 事件回調(diào)
public static function afterRequest(Request $request, Response $response): void
{
// TODO: Implement afterRequest() method.
// 示例:獲取此次請(qǐng)求響應(yīng)的內(nèi)容
TrackerManager::getInstance()->getTracker()->endPoint('request');
$responseMsg = $response->getBody()->__toString();
Logger::getInstance()->console('響應(yīng)內(nèi)容:' . $responseMsg);
// 響應(yīng)狀態(tài)碼:
// var_dump($response->getStatusCode());
// tracker 結(jié)束,結(jié)束之后,能看到中途設(shè)置的參數(shù),調(diào)用棧的運(yùn)行情況
TrackerManager::getInstance()->closeTracker();
}
}