Heim >Backend-Entwicklung >PHP-Tutorial >说好的fsockopen的非阻塞模式呢?为什么还是会阻塞

说好的fsockopen的非阻塞模式呢?为什么还是会阻塞

WBOY
WBOYOriginal
2016-06-23 14:00:211007Durchsuche

function fsockopen_test(){    $hostname = 'm.cn';    $url = '/test/1.php';    $fp = fsockopen($hostname, 80, $errno, $errstr, 5);    if (!$fp) {        echo "$errstr ($errno)";        return false;    }    stream_set_blocking($fp,0);//开启了手册上说的非阻塞模式    $header = "GET $url HTTP/1.1\r\n";     $header.="Host: $hostname\r\n";    $header.="Connection: Close\r\n\r\n";//长连接关闭    fwrite($fp, $header);    fclose($fp);}fsockopen_test();

请求的/test/1.php里面的代码:
sleep(6);$fp  =  fopen ( './data.txt' ,  'w' );fwrite ( $fp ,111);fclose ( $fp );
通过浏览器控制台查看实际还是会等test/1.php执行完毕,这边才刷新。这是为什么呢?


回复讨论(解决方案)

没问题呀

echo date('Y-m-d H:i:s'), PHP_EOL;fsockopen_test();echo date('Y-m-d H:i:s'), PHP_EOL;
可以看到没有延时

没问题呀

echo date('Y-m-d H:i:s'), PHP_EOL;fsockopen_test();echo date('Y-m-d H:i:s'), PHP_EOL;
可以看到没有延时 额?我这边怎么有呢?

没问题呀

echo date('Y-m-d H:i:s'), PHP_EOL;fsockopen_test();echo date('Y-m-d H:i:s'), PHP_EOL;
可以看到没有延时 我修改成你的代码,然后把原来的输出注释了,发现还是有延时呢

没问题呀

echo date('Y-m-d H:i:s'), PHP_EOL;fsockopen_test();echo date('Y-m-d H:i:s'), PHP_EOL;
可以看到没有延时
找到原因了,把这段代码注释掉就OK了
function fsockopen_test(){    $hostname = 'm.cn';    $url = '/test/1.php';    $fp = fsockopen($hostname, 80, $errno, $errstr, 5);    if (!$fp) {        echo "$errstr ($errno)";        return false;    }    stream_set_blocking($fp,0);//开启了手册上说的非阻塞模式    $header = "GET $url HTTP/1.1\r\n";     $header.="Host: $hostname\r\n";    $header.="Connection: Close\r\n\r\n";//长连接关闭    fwrite($fp, $header);    /*$html = '';    while (!feof($fp)) {        $html.=fgets($fp);    }    echo $html;*/    fclose($fp);}echo time(),'<br>';fsockopen_test();echo time(),'<br>';

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn