Maison  >  Article  >  développement back-end  >  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
little bottleavant
2019-04-23 11:49:433696parcourir

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);
        }
    }

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);
}

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!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer