如何解决AuthenticationMiddleware.php中的process函数有时会花费很长时间
某些页面需要进行简单的重新加载,有时会很长[4到45秒之间]。不幸的是,延迟是无法预料的。首先,我认为这当然是我做错了,但是经过进一步调查,我发现了延迟功能。
它在vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php
函数process()
中运行此代码$service->authenticate($request);
public function process(ServerRequestInterface $request,RequestHandlerInterface $handler): ResponseInterface
{
$service = $this->getAuthenticationService($request);
try {
$result = $service->authenticate($request);
^^^^^^^^ This call needs between 0.01 and 45 seconds
} catch (AuthenticationRequiredException $e) {
$body = new Stream('php://memory','rw');
这些是我执行时间测量中的一些示例转储:
/api/shop
的转储,执行时间长;滚动到右侧以查看每个快照之间的增量时间:
[2020-11-01T16:58:02+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0103 - Delta time:0.04342
[2020-11-01T16:58:14+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0107 - Delta time:11.81272
[2020-11-01T16:58:14+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0121 - Delta time:11.81295
然后,在17秒后[没有更改,只需重新加载页面]就没有延迟了:
[2020-11-01T16:58:31+00:00] /api/shop/ - /vendor/cakephp/cakephp/src/Http/Runner.php :0071 - Delta time:0.03756
[2020-11-01T16:58:31+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0103 - Delta time:0.04211
[2020-11-01T16:58:31+00:00] /api/shop/ - /vendor/cakephp/authentication/src/Middleware/AuthenticationMiddleware.php :0107 - Delta time:0.04506
任何想法是什么原因?这非常令人沮丧,因为它完全不可预测。如上面的真实样本所示,几秒钟之内会有一个巨大的延迟,然后它会延迟3-4次,然后突然又延迟一次。如前所述,我什么也没做。只是重新加载页面。
CakePHP 4.1.4
解决方法
我也在CakePHP Github Issues下发布了此案例。 CakePHP成员othercorey给了我检查Authentication\Authenticator\SessionAuthenticator
的建议,在这里我找到了原因:
在vendor/cakephp/cakephp/src/Http/Session.php
中
->在函数start()
中
->通话if (!session_start()) {
完整代码:
if (!session_start()) {
throw new RuntimeException('Could not start the session');
}
然后解决方案非常简单。我正在使用SSE,这就是这些不可预测的延迟的原因。在SSE函数中调用session_write_close()
后,页面加载
有空的时候,我将检查数据库中存储的会话是否是另一种解决方案。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。