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");