我有一個用PHP編寫的Web應用程序,它可以連接iPhone應用程序。當應用程序調用服務時,會向Apple的APN服務器發送一系列通知消息,以便它可以嚮應用程序的其他用戶發送推送通知。PHP web服務,在腳本執行結束前發送響應
這個過程在某些情況下可能很耗時,而且我的應用在獲得響應之前必須等待很長時間。響應完全獨立於發送到APN服務器的通知消息的結果。
因此,我希望Web服務將響應發送迴應用程序,而不管發送給APN的消息是否已發送。
我試着用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響應之前結束。我做錯了什麼或者這是正常的行爲?如果這是正常的,那麼還有另一種方法可以解決這個問題嗎?
謝謝!
我試過ob_flush()後跟一個flush(),因爲它似乎前者不足以保證響應被髮送。不幸的是,這也在響應中發送了關於PHP後端的信息。守護進程方法可能是最好的方法,但我沒有時間去實現它,因此我從應用程序向另一個Web服務發送了第二個請求,以分別處理通知。 – rickholt