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

时间:2011-09-22 22:11:26

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

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

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

因此,无论是否已发送到APN的消息,我都希望Web服务将响应发送回应用程序。

我尝试使用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。我做错了什么还是这种正常行为?如果这是正常的,那么还有另一种方法可以解决这个问题吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

我认为你可以在做“漫长”过程之前发回回复。看看PHP的flush()功能,它可能会有所帮助

答案 1 :(得分:0)

如果您在Apache中托管PHP进程,那么您真的不应该使用它:请参阅this部分,其中说明* 不应在Web服务器环境中启用Process Control并且意外如果在Web服务器环境中使用任何过程控制功能,则可能会发生结果。 *

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