gpt4 book ai didi

java - 从效率角度来看,使用 HttpClient 发布文件的最佳方式

转载 作者:行者123 更新时间:2023-12-02 06:40:40 28 4
gpt4 key购买 nike

我必须构建一个相当自定义的负载测试工具,因此我不想使用 JMeter(让我们暂时假设使用 jmeter 无法完成自定义级别)。

此负载测试工具的一个重要部分是将 XML 发送到 API 端点。

如何改进以下代码以使其快速/高效?

private boolean PostErrorToApi() throws IOException {
File xmlSample = new File("/path/to/file/sample.xml");

CloseableHttpClient httpClient = HttpClients.createDefault();

HttpPost httpPost = new HttpPost("http://localhost:8090/some/api/method/get/");
httpPost.setEntity(new FileEntity(xmlSample, "text/xml, application/xml"));

CloseableHttpResponse response = httpClient.execute(httpPost);

String line = "";

try {
BufferedReader reader = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

while ((line = reader.readLine()) != null) {
System.out.println(line);
}
} finally {
response.close();
}

if (line.equals("200 OK"))
return true;
else
return false;
}

我的目标是每秒处理几千个请求(http 延迟不应该是一个大问题,因为这将在专用网络中)。

我并不是想在这里获得真实的场景,目标是看看服务是否可以保持 48 小时,并且只是为了监控可能出现的任何问题等。

最佳答案

主要是 IO 密集型任务,而不是 CPU。您可以尝试将文件缓存在内存中,而不必每次都从光盘读取它。缓存httpClient实例,使用同一个连接多次发送文件。在一个 JVM 中生成多个线程,每个线程将创建单独的连接。如果还不够,创建多个进程,在不同的机器上运行并收集结果

此外,readLine 将阻塞,直到数据可用,因此您的任务将被卡住,您将永远不知道是否有任何问题。设置 SO_TIMEOUT 来读取响应。

关于java - 从效率角度来看,使用 HttpClient 发布文件的最佳方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19168944/

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