Maison > développement back-end > tutoriel php > Comment utiliser PHP pour implémenter des requêtes asynchrones et ignorer les valeurs de retour

Comment utiliser PHP pour implémenter des requêtes asynchrones et ignorer les valeurs de retour

little bottle
Libérer: 2023-04-06 09:22:01
avant
3709 Les gens l'ont consulté

Le contenu principal de cet article est d'utiliser PHP pour implémenter des requêtes asynchrones et ignorer les valeurs de retour. Il a une certaine valeur de référence. Les amis dans le besoin peuvent y jeter un œil.

Besoins du projet, le scénario est le suivant :

Sous certaines conditions, il est nécessaire d'appeler l'interface pour envoyer plusieurs requêtes pour exécuter le script, mais puisque le temps d'exécution du script sous chaque requête dure environ une demi-heure, alors abandonnez et renvoyez le résultat de l'exécution. Cela nécessite seulement qu'il puisse être envoyé en quelques secondes.

Le code est le suivant :

/**
     * 发起异步请求,忽略返回值
     * @param $url  请求url
     * @return bool
     */
    function asyncPost($url)
    {
        $args = parse_url($url); //对url做下简单处理
        $host = $args['host']; //获取上报域名
        $path = $args['path'] . '?' . $args['query'];//获取上报地址
        $fp = fsockopen($host, 80, $error_code, $error_msg, 1);
        if (!$fp) {
            Log::record('获取错误信息:'.$error_code . ' _ ' . $error_msg, Log::INFO, true);
            Log::save('',LOG_PATH . '_' . date('y_m_d') . '.txt');
            return false;//
        } else {
            stream_set_blocking($fp, true);//开启了手册上说的非阻塞模式
            stream_set_timeout($fp, 1);//设置超时
            $header = "GET $path HTTP/1.1\r\n";  //注意 GET/POST请求都行 我们需要自己按照要求拼装Header http协议遵循1.1
            $header .= "Host: $host\r\n";
            $header .= "Connection: close\r\n\r\n";//长连接关闭
            fputs($fp, $header);
            fclose($fp);
        }
    }
Copier après la connexion

L'exemple est le suivant :

$url[0] = "http://XXXX/demo.php?a=1&b=2&c=3&d=4&e=5";
$url[1] = "http://XXXX/demo.php?a=1&b=2&c=3&d=4&e=5";
$url[2] = "http://XXXX/demo.php?a=1&b=2&c=3&d=4&e=5";
$url[3] = "http://XXXX/demo.php?a=1&b=2&c=3&d=4&e=5";
$url[4] = "http://XXXX/demo.php?a=1&b=2&c=3&d=4&e=5";
$url[5] = "http://XXXX/demo.php?a=1&b=2&c=3&d=4&e=5";
foreach($url as $k=>$val){
    asyncPost($val);
}
Copier après la connexion

Le résultat est le suivant :

Ce qui précède sont les résultats de mes multiples tests, et la plage de temps est la même que ci-dessus.

Tutoriels associés : Tutoriel vidéo PHP

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!

Étiquettes associées:
source:cnblogs.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal