多次请求同一个路由偶尔会出现定位到别的路由接口,比如我请求/user/state接口,偶尔会给我返回/novel/catalogues或者其它接口的内容
最近我有在控制器使用如下的自定义函数,希望达到接口先返回数据,然后控制器继续执行不需要返回数据的逻辑部分,我猜这么做会造成如上的问题
if (!function_exists('resDefer')) {
function resDefer($response, ?\Closure $callback = NULL) {
if (is_array($response)) $response = \app\struct\Response::build($response);
if (!($response instanceof \app\struct\Response)) {
throw new JsonException(Http::PARAMETER_ERROR_MSG, Http::PARAMETER_ERROR_CODE);
}
$content = Http::json($response->code, $response->message, $response->data);
// 这么做可能有问题
\request()->connection->send($content->withHeaders($response->headers));
if ($callback) $callback();
return $content;
}
}
如题描述
看看是不是哪里动态修改了路由····
没有动态修改路由,我在本地以及测试服一直测不出这个情况,在我们正式服测出来了,大概十来次会出现一次
大佬,我的问题描述改了,帮忙看看是不是那个问题。。。
我也遇到这个了,返回错乱,好急
估计不是路由问题,感觉像是控制器或者响应无法被回收,再次被使用
我的确定是\request()->connection->send的问题,应该就是这个方法造成的$request回收的问题
造成这个问题的原因很简单,因为你一个请求返回了两次响应。
connection->send 发送了一次响应 A。
return $content时又发送了一次响应 B。
http客户端都是一次请求获取一个响应,客户端请求第一次拿到响应A,下次再请求拿到的大概率是B,所以错乱。
如果你想异步执行个任务,直接定时器就好了。