Maison >développement back-end >Problème PHP >Quelle est la méthode d'appel asynchrone en php
Méthode d'appel asynchrone PHP : 1. Dans le code HTML renvoyé au client, intégrez un appel AJAX, ou intégrez une balise img, et src pointe vers le script fastidieux à exécuter 2. Utilisez ; la fonction popen pour ouvrir un lien vers un tube pour le processus généré par l'exécution de la commande donnée.
[Recommandations d'apprentissage associées : programmation php(vidéo)]
1. Le moyen simple consiste à intégrer l'appel AJAX dans le code HTML renvoyé au client, ou à intégrer une balise img avec src pointant vers le script fastidieux à exécuter.
Cette méthode est la plus simple et la plus rapide. Le serveur n'a pas besoin de passer d'appels.
Mais l'inconvénient est que d'une manière générale, Ajax devrait être déclenché après onLoad. C'est-à-dire que si l'utilisateur clique sur la page puis la ferme, notre script en arrière-plan ne sera pas déclenché.
Si vous utilisez la balise img, cette méthode ne peut pas être qualifiée d'exécution asynchrone au sens strict. Le navigateur de l'utilisateur attendra longtemps que l'exécution du script php soit terminée, c'est-à-dire que la barre d'état du navigateur de l'utilisateur indique toujours qu'il est toujours en cours de chargement.
Bien entendu, d'autres méthodes avec des principes similaires peuvent également être utilisées, comme les balises de script, etc.
2. popen()
resource popen ( string command, string mode );
//Ouvre un canal pointant vers le processus généré par l'exécution de la commande donnée. Ouvre un canal vers le processus généré en interrompant l'exécution de la commande donnée.
Vous pouvez donc l'appeler mais ignorer sa sortie.
pclose(popen("/home/xinchen/backend.php &", 'r'));
Cette méthode évite les défauts de la première méthode et est également rapide. Mais le problème est que cette méthode ne peut pas demander un autre WebService via le protocole HTTP et ne peut exécuter que des fichiers de script locaux. Et il ne peut être ouvert que dans un seul sens et ne peut pas transmettre un grand nombre de paramètres au script appelé.
Et si le nombre de visites est élevé, un grand nombre de processus seront générés. Si vous faites appel à des ressources externes, vous devez réfléchir vous-même à la concurrence.
3. Utilisez la méthode CURL
et définissez CUROPT_TIMEOUT
sur 1 (le minimum est 1, déprimant). Autrement dit, le client doit attendre au moins 1 seconde.
$ch = curl_init(); $curl_opt = array(CURLOPT_URL, 'http://www.example.com/backend.php', CURLOPT_RETURNTRANSFER, 1, CURLOPT_TIMEOUT, 1,); curl_setopt_array($ch, $curl_opt); curl_exec($ch); curl_close($ch);
4. Utilisez fsockopen
Cette méthode devrait être la plus parfaite, mais l'inconvénient est que vous devez épeler vous-même la partie de l'en-tête HTTP.
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30); if (!$fp) { echo "$errstr ($errno)<br />\n"; } else { $out = "GET /backend.php / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); /*忽略执行结果 while (!feof($fp)) { echo fgets($fp, 128); }*/ fclose($fp); }
Donc, dans l’ensemble, la méthode la meilleure et la plus simple est la première méthode.
Le plus parfait devrait être le dernier, mais c'est plus compliqué
Recommandations d'apprentissage associées : Vidéo de programmation
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!