gpt4 book ai didi

java - 试图加快从java中的套接字读取

转载 作者:行者123 更新时间:2023-11-30 07:32:40 26 4
gpt4 key购买 nike

我正在尝试制作一个可以发送 HTTP 请求并从网络服务器接收响应的客户端。我尝试使用 Java 的 HttpURLConnection 类,但它无法让我充分控制实际发送到服务器的内容,因此我想编写自己的 HTTP 请求消息并通过套接字发送它们。但是,对于某些服务器来说,从 Socket 的 InputStream 中读取的速度非常慢,如果可能的话,我想加快速度。这是我用来测试与 HttpURLConnection 相比,套接字的读取速度有多慢的一些代码:

public static void useURLConnection() throws Exception
{
URL url = new URL("http://" + hostName + "/");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
InputStream in = conn.getInputStream();
byte[] buffer = new byte[buffersize];
long start = System.currentTimeMillis();
while(in.read(buffer) != -1) { }
System.out.println(System.currentTimeMillis() - start);
}

public static void useSocket() throws Exception
{
byte[] request = ("GET / HTTP/1.1\r\nHost: " + hostName + "\r\n\r\n").getBytes();
Socket socket = new Socket(hostName, 80);
OutputStream out = socket.getOutputStream();
InputStream in = socket.getInputStream();
out.write(request);
byte[] buffer = new byte[buffersize];
long start = System.currentTimeMillis();
while(in.read(buffer) != -1) { }
System.out.println(System.currentTimeMillis() - start);
}

对于某些服务器(例如 www.wikipedia.org),这两种方法的运行时间大致相同,但对于其他服务器(例如 www.google),从套接字读取数据要慢得多——几分钟而不是几毫秒.com。有人可以解释这是为什么,也许可以给我一些指示,如果有的话,我可以做些什么来加快从套接字的读取速度?谢谢。

最佳答案

因此,HTTP/1.1默认为客户端请求开启keepalive。在您的套接字示例中,您将发送 HTTP/1.1 作为您的版本字符串,因此您隐式接受您可以支持 keepalive,但您完全无视它。

基本上,尽管服务器正在等待您做某事(发送另一个请求或关闭连接),但您正在阻止尝试从服务器读取更多内容。

您需要发送 header “Connection: close”或发送 HTTP/1.0 作为您的版本字符串。

关于java - 试图加快从java中的套接字读取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6428994/

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