Maison > développement back-end > tutoriel php > php stream_select兑现可控并发

php stream_select兑现可控并发

WBOY
Libérer: 2016-06-13 13:09:30
original
1248 Les gens l'ont consulté

php stream_select实现可控并发

<?php $time = 100;
$parallel = 10;
$sockets = array();
$results = array();
$failed = array();

$id = 0;
$url = 'localhost:8080';
$http_msg = "GET /stream_select_req.php?delay=%s";
$http_msg .= "HTTP/1.0\r\n";
$http_msg .= "Host:localhost:8080\r\n\r\n";

$timeout = 300;
for($i = 0 ; $i < $parallel ; $i++){
        $s = stream_socket_client($url,$errno,$errstr,$timeout,STREAM_CLIENT_ASYNC_CONNECT|STREAM_CLIENT_CONNECT);
        if($s){
                $sockets[$id++] = $s;
                fwrite($s,sprintf($http_msg,$i));
        }else{
                echo "Stream $id falied to open correctly.";
                $failed[] = sprintf($http_msg,$i);
        }
}

while(count($sockets)){
        $read = $sockets;
        stream_select($read,$w=null,$e=null,$timeout);
        if(count($read)){
                foreach($read as $r){
                        $index = array_search($r,$sockets);
                        $data = fread($r,1024);
                        if(strlen($data) == 0 ){
                                echo "Stream $index closes at ".date('h:i:s')."<br>";
                                fclose($r);
                                unset($sockets[$index]);
                                //add new task
                                $next = $id++;
                                if($next 
Copier après la connexion
Étiquettes associées:
source:php.cn
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal