首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CodeIgniter RESTful,异步/后台进程

CodeIgniter RESTful,异步/后台进程
EN

Stack Overflow用户
提问于 2012-12-03 19:53:03
回答 4查看 11.2K关注 0票数 5

有一个操作,我发送了一些值,如果一切正常,我返回200个代码作为响应。

现在,我想用同样的方法添加一个新的操作:使用APNS (Apple Push Notificacion Service)和GCM (Google Cloud Messaging)发送此修改的通知。

当我必须发送不超过3-5个通知时,它工作得很好,问题是APNS,因为我必须一个接一个地发送这些消息,这需要很长时间,所以我的应用程序收到超时异常(所有通知都已发送,但用户收到错误连接...)

我可以发送200代码响应,然后继续发送此通知吗?(就像这样……)

代码语言:javascript
复制
function my_update_method_post(){
   //....GET my POST values
   update($data);
   $this->response(array('result'=>1),200));


   //Send Notifications
   ....
}

先谢谢你...

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-12-04 03:51:48

我找到了一个完美的解决方案,因为我不期望任何结果值。如果无法发送通知...我会将其记录到我数据库中。

这是我用来发送"async“请求的函数(是的,这不是一个异步请求,但它的工作方式是我想要的)

代码语言:javascript
复制
function curl_post_async($url, $params)
{
    $post_string = http_build_query($params);
    $parts=parse_url($url);

    $fp = fsockopen($parts['host'],
        isset($parts['port'])?$parts['port']:80,
        $errno, $errstr, 30);

    if(!$fp)
    {
        //Perform whatever logging you want to have happen b/c this call failed!    
    }
    $out = "POST ".$parts['path']." HTTP/1.1\r\n";
    $out.= "Host: ".$parts['host']."\r\n";
    $out.= "Content-Type: application/x-www-form-urlencoded\r\n";
    $out.= "Content-Length: ".strlen($post_string)."\r\n";
    $out.= "Connection: Close\r\n\r\n";
    if (isset($post_string)) $out.= $post_string;

    fwrite($fp, $out);
    fclose($fp);
}
票数 2
EN

Stack Overflow用户

发布于 2012-12-03 20:02:26

由于PHP本身并不支持线程或异步函数调用,因此您必须使用一种老套的解决方案。看看我这里的问题:PHP file_get_contents() follow Content-length header

解决方案是发送一个Connection: CloseContent-Length报头,然后让客户端知道这些报头(参见上面的链接)。例如,在curl的情况下,一旦达到Content-Length,连接就会关闭,但PHP脚本仍然在“后台”运行,因此您可以在那时开始耗时的操作。

致以亲切的问候,

斯特凡

备注:如果脚本执行时间过长,请确保PHP最大执行时间不会影响您的工作

票数 1
EN

Stack Overflow用户

发布于 2012-12-03 20:02:36

是的,这是可能的。

你应该看看PHP exec()this链接。您应该在控制器中设置一个从命令行调用的函数。然后,您将传入要使用的GCM/APNS数据的数组。

这种解决方案并不理想,因为您无法告诉客户端所有消息都已成功发送。你只需要发回200,告诉他们请求已经收到,一切正常。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13682695

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档