PHP Web服务,在脚本执行结束前发送响应

标签 php iphone ios web-services apple-push-notifications

我有一个用 PHP 编写的网络服务,iPhone 应用程序连接到该网络服务。当应用程序调用该服务时,一系列通知消息会发送到 Apple 的 APNs 服务器,以便它可以向应用程序的其他用户发送推送通知。

在某些情况下,此过程可能很耗时,我的应用必须等待很长时间才能收到响应。响应完全独立于发送到 APNs 服务器的通知消息的结果。

因此,我希望网络服务将响应发送回应用程序,而不管是否已发送到 APNs 的消息。

我尝试使用 pcntl_fork 来解决问题:

<?php
...
$pid = pcntl_fork();
if($pid == -1) 
{
    // Could not fork (send response anyway)
    echo "response";
} 
else if($pid) 
{
    // Parent process - send response to app
    echo "response";
} 
else 
{
    // Child process - send messages to APNs then die
    sendMessageAPNs($token_array);
    die();
}
?> // end of script

不幸的是,即使我没有在父进程中使用 pcntl_wait,父进程似乎也在等待子进程结束才能发送响应。我做错了什么还是这是正常行为?如果这是正常现象,还有其他方法可以解决这个问题吗?

谢谢!

最佳答案

如果您在 Apache 中托管 PHP 进程,那么您真的不应该使用它:参见 this对于说 *Process Control should not be enabled within a web server environment 的部分,如果在 web 服务器环境中使用任何 Process Control 功能,则可能会发生意外结果。 *.

您可能应该使用您选择的首选语言设置一个单独的守护进程,并将 APNS 通信任务交给它。如果你真的真的真的必须尝试使用​​ ob_flush() .

关于PHP Web服务,在脚本执行结束前发送响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7522090/

相关文章:

php - Objective-C Json 字符串到 PHP 数组

php - 在 Laravel 5 中的选择查询中使用属性值

iphone - iOS 7 中的唯一设备标识符

iphone - 视网膜设备的应用程序图标

ios - 使用 iOS API 的文件共享服务

iOS UIScrollView 只能水平滚动

php - PHP 是否有 "named parameters"以便可以省略前面的参数并可以写入后面的参数?

需要带有 php 变量建议的 Javascript 代码

php - 如何让PHP能够读取系统环境变量

iphone - CABasicAnimation 保持恒定速度