gpt4 book ai didi

php - 访问套接字时如何设置超时时间?

转载 作者:行者123 更新时间:2023-12-03 12:01:30 24 4
gpt4 key购买 nike

以下是我的代码。我希望当几秒钟后没有数据可读取时,fread可以返回。我叫stream_set_timeout。但这是行不通的。我也叫stream_get_meta_data。它还没有满足我的需求。我正在连接chat.facebook.com。

$fp = fsockopen($server, 8888, $errno, $errstr);

stream_socket_enable_crypto($fp, true, STREAM_CRYPTO_METHOD_TLS_CLIENT);

fwrite($fp, $xml);

stream_set_timeout($fp, 5);

$str = fread($fp,8192);//This code will hang when there don't have data to read.

最佳答案

如果您阅读了stream_set_timeout()的手册,就会知道stream_set_timeout()在超时的情况下唯一要做的就是将stream_get_meta_data()返回的数组的'timed_out'键设置为true。

stream_set_timeout($fp, 5);
// set stream into non-blocking mode
stream_set_blocking($fp, false);

$break_counter = 0;
$result = '';
$info = stream_get_meta_data($fp);

while (!$info['timed_out'] && !feof($fp)) {
$str = @fgets($fp, 1160);
if ($str) {
$result .= $str;
} else {
$break_counter += 1;

if ($break_counter > 100) {
break;
}

// 10000*100 microseconds gives you one second
usleep(10000);
}
$info = stream_get_meta_data($fp);
}

关于php - 访问套接字时如何设置超时时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7749869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com