返回

时间:2017-12-13 09:49:36

标签: php multithreading laravel asynchronous laravel-5

我有一个端点,当传真开始接收时会触发该端点。在这里,我有传真的ID,但它需要一些时间才能实际收到,所以我可以下载它的内容。因此,将其视为“接收......收到”流程。

public function endpoint() { 
   // Here I get notified when started receiving

   $fax = $twilio->fax->v1
        ->faxes($request['FaxSid'])
        ->fetch();

   // $fax->status is receiving

   $twimlResponse = new \SimpleXMLElement("<Response></Response>");
   $twimlResponse->addChild('Receive');

   return response($twimlResponse->asXML())
        ->header('Content-Type', 'text/xml');
}

使用$fax,我可以获得它的id并开始以15秒的间隔观察它,但是有问题。我必须快速返回响应,否则Twilio会抛出超时错误。

我尝试创建一个不同的功能:

public function receivedFax($fax) {
    $twilio = new Client("XXX", "YYY");

    while ($fax->status == 'receiving') {

        $fax = $twilio->fax->v1
            ->faxes($fax->sid)
            ->fetch();

        sleep(15);
    } 
    // do stuff
}

但是,如果我在endpoint()方法中返回响应之前调用它,因为php不是异步的,它会抛出超时。

处理这种情况的正确方法是什么?

0 个答案:

没有答案