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

WBOY
Lepaskan: 2016-06-23 14:00:21
asal
926 orang telah melayarinya

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();
Salin selepas log masuk

请求的/test/1.php里面的代码:
sleep(6);$fp  =  fopen ( './data.txt' ,  'w' );fwrite ( $fp ,111);fclose ( $fp );
Salin selepas log masuk
通过浏览器控制台查看实际还是会等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;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
可以看到没有延时

没问题呀

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

没问题呀

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

没问题呀

echo date('Y-m-d H:i:s'), PHP_EOL;fsockopen_test();echo date('Y-m-d H:i:s'), PHP_EOL;
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
可以看到没有延时
找到原因了,把这段代码注释掉就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>';
Salin selepas log masuk

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!