laravel 推送器 webhook 总是因超时而失败
laravel pusher webhook always fails due timeout
我正在使用 pusher webhook 类型的 presence 和 channel existence,并且在本地我正在使用 ngrok 将请求代理到我的机器。
每当将 webhook 请求发送到我的本地服务器时,它就会在 ngrok 中收到 return 200 状态代码,但是,对于完全相同的请求,我在 Pusher 调试控制台中看到“webhook 因超时而失败”。
我使用 microtime(true) 为我的控制器执行计时,通常它需要 0.05325984954834,这低于 Pusher 3 秒超时。
问题是什么?请问如何解决?
这是我的代码:
public function channelExistance(Request $request){
// return response('ok', 200);
$start = microtime(true);
if($this->requestValid($request)){
foreach ($request->input('events') as $event) {
$name = $event['name'];
$channel_name = $event['channel'];
if(stripos($channel_name, 'presence') === false && stripos($channel_name, 'private') === false){
if($event['name'] == 'channel_occupied'){
$this->manager->channelStarted($channel_name);
}
elseif($event['name'] == 'channel_vacated'){
$this->manager->supporterIsFreed($channel_name);
// return response('ok', 200);
}
}
}
}
$end = microtime(true) - $start;
logger('time taken: '.$end);
header("Status: 200 OK");
}
这表明您没有正确返回 200 响应。
通读 this answer 似乎有多种方式可以返回响应。在你的情况下,你可以替换
header("Status: 200 OK");
和
header("HTTP/1.1 200 OK");
我正在使用 pusher webhook 类型的 presence 和 channel existence,并且在本地我正在使用 ngrok 将请求代理到我的机器。 每当将 webhook 请求发送到我的本地服务器时,它就会在 ngrok 中收到 return 200 状态代码,但是,对于完全相同的请求,我在 Pusher 调试控制台中看到“webhook 因超时而失败”。 我使用 microtime(true) 为我的控制器执行计时,通常它需要 0.05325984954834,这低于 Pusher 3 秒超时。 问题是什么?请问如何解决?
这是我的代码:
public function channelExistance(Request $request){
// return response('ok', 200);
$start = microtime(true);
if($this->requestValid($request)){
foreach ($request->input('events') as $event) {
$name = $event['name'];
$channel_name = $event['channel'];
if(stripos($channel_name, 'presence') === false && stripos($channel_name, 'private') === false){
if($event['name'] == 'channel_occupied'){
$this->manager->channelStarted($channel_name);
}
elseif($event['name'] == 'channel_vacated'){
$this->manager->supporterIsFreed($channel_name);
// return response('ok', 200);
}
}
}
}
$end = microtime(true) - $start;
logger('time taken: '.$end);
header("Status: 200 OK");
}
这表明您没有正确返回 200 响应。 通读 this answer 似乎有多种方式可以返回响应。在你的情况下,你可以替换
header("Status: 200 OK");
和
header("HTTP/1.1 200 OK");