gpt4 book ai didi

php - 使用单个连接编写多个发布请求 - PHP

转载 作者:可可西里 更新时间:2023-10-31 23:46:41 25 4
gpt4 key购买 nike

我正在使用以下代码片段写入服务器。

$fp = connect();
$sent_requests = 0;
function connect() {
$addr = gethostbyname("example.com");
$fp = fsockopen("$addr", 80, $errno, $errstr);
socket_set_blocking( $fp, false );
if (!$fp) {
echo "$errstr ($errno)<br />\n";
exit(1);
} else{
echo "Connected\n";
return $fp;
}
}


function sendTestCalls($load){
global $fp, $sent_requests;
if(!$fp){
echo "reconnecting";
$sent_requests = 0;
//echo stream_get_contents($fp) . "\n";
fclose($fp);
$fp = connect();
}
$data = "POST /test HTTP/2.0\r\n";
$data.= "Host: example.com\r\n";
$data.= "Content-Type: application/json\r\n";
$data.= "Content-Length: ".strlen($load)."\r\n";
$data.= "Connection: Keep-Alive\r\n";
$data.= "xYtU87BVFluc6: 1\r\n";
$data.= "\r\n" . $load;

$bytesToWrite = strlen($data);
$totalBytesWritten = 0;

while ($totalBytesWritten < $bytesToWrite) {
$bytes = fwrite($fp, substr($data, $totalBytesWritten));
$totalBytesWritten += $bytes;
}

$sent_requests++;
}
$time = time();
for($i=0; $i<1000; $i++) {
sendTestCalls('{"justtesting": "somevalue"}');
}
fclose($fp);
$time_taken = time() - $time;//might be a bit inaccurate
echo "Time Taken: " . $time_taken . "\n";

当我检查我的服务器上的访问日志时,收到的发布请求少于 1000 个(在 0 到 900 的范围内)。我在这里做错了什么?

编辑1我想我的套接字超时了。在这种情况下重新连接时,我应该如何检查它是否已断开连接。我尝试使用 stream_get_meta_data($fp) 但没有效果。

最佳答案

尝试在每个请求之前插入:


$info = stream_get_meta_data($fp);
如果($信息['timed_out']){
fclose($fp);
$fp = 连接();
}

关于php - 使用单个连接编写多个发布请求 - PHP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33281254/

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