J'ai un service web écrit en PHP auquel une application iPhone se connecte. Lorsque l'application appelle le service, une série de messages de notification sont envoyés au serveur APN d'Apple afin qu'il puisse envoyer des notifications Push à d'autres utilisateurs de l'application.Service web PHP, envoyer une réponse avant la fin de l'exécution du script
Ce processus peut prendre du temps dans certains cas et mon application doit attendre longtemps avant d'obtenir une réponse. La réponse est totalement indépendante du résultat des messages de notification envoyés au serveur APNs. Par conséquent, je voudrais que le service Web renvoie la réponse à l'application indépendamment du fait que les messages aux APN ont été envoyés.
J'ai essayé d'utiliser pcntl_fork pour résoudre le problème:
<?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
Malheureusement, le processus parent semble attendre que le processus de l'enfant à la fin avant d'envoyer la réponse même si je ne l'utilise pcntl_wait dans le processus parent. Est-ce que je fais quelque chose de mal ou est ce comportement normal? Si c'est normal, y a-t-il une autre façon de résoudre ce problème?
Merci!
J'ai essayé ob_flush() suivi d'un flush() car il semble que le premier ne soit pas suffisant pour garantir l'envoi de la réponse. Malheureusement, cela a également envoyé des informations sur le backend PHP dans la réponse. La méthode démon est probablement la meilleure solution, mais je n'ai pas eu le temps de l'implémenter. J'ai donc envoyé une seconde requête à un autre service web de mon application pour gérer les notifications séparément. – rickholt