gpt4 book ai didi

java - 随后的 Socket 连接到网页需要不同的时间

转载 作者:可可西里 更新时间:2023-11-01 17:34:58 25 4
gpt4 key购买 nike

我最近一直在问几个问题,希望这是最后一个(至少我回答了其中一个问题!)

我有以下直接代码,通过套接字连接到网页(这里的参数是网站 buzzfeed.com 的 IP 地址):

Socket s = new Socket("23.34.229.118", 80);
BufferedReader reader = new BufferedReader(new InputStreamReader(s.getInputStream()));
PrintStream writer = new PrintStream(s.getOutputStream());
writer.println("GET / HTTP/1.0\r\nHost: www.buzzfeed.com\r\n");

String line;
while((line = reader.readLine()) != null)
{
// just read, do nothing. When printed, it print the correct data.
}

s.close();

此代码有效并打印出 buzzfeed.com 的 HTML 源代码。然而,这个程序的第一次调用(我只是一遍又一遍地启动程序),总是花费大约两倍或三倍于后续调用的时间,发生在非常短的时间内。例如:

  • 第一次调用 - 1500 毫秒)。
  • 调用秒数(紧接着)- 600 毫秒。
  • 这次调用(紧接在第二次之后)- 400 毫秒。

然后,如果我等待约 20 秒,我们将返回到“第一次调用”,连接再次需要大约 1500 毫秒。

我认为这显然是缓存某些内容的情况 - 无论是在我这端还是在服务器端。因此,我将这些行添加到我的代码中:

// don't keep connections alive.
System.setProperty("http.keepAlive", "false");

// do not cache dns.
java.security.Security.setProperty("networkaddress.cache.ttl" , "0");

但是没有用。我在这里缺少一些属性(property)或解释吗?我可以用来使时间统一的其他一些“setProperty”?更好的是,如果这是一个缓存问题,我该如何处理这个缓存?到底缓存了什么?我正在直接连接到一个 IP 地址...

如果这是已知的服务器行为,我也想知道。请注意,这并不总是发生,例如,连接到 stackoverflow (104.16.33.249) 会产生不同的响应时间(即使在这种情况下,后续响应似乎也更快一些)。它与静态页面和动态页面有关吗?我有点困惑,欢迎任何答案。

谢谢!

最佳答案

  • First invokation - 1500 milliseconds).
  • Seconds invokation (immediately after) - 600 milliseconds.
  • This invokation (immediately after the second) - 400 milliseconds.

Then, if I wait ~20 seconds, we go back to the "first invokation", and the connection takes around 1500 milliseconds again.

您可以先在浏览器中查看 HTTP header (F12/Network) 或使用 Wireshark看看真正发生了什么,例如,Keep-Alive-Cache-headers,以及不同的时间。

例如,这些是 www.buzzfeed.com 返回的 header :

HTTP/1.1 200 OK
Server: Apache
Content-Type: text/html
X-BuzzFeed: webdr05
Vary: Accept-Encoding
X-BuzzFeed-Debug: /index (bucket testing)
Content-Encoding: gzip
Cache-Control: max-age=29
Date: Sat, 26 Dec 2015 14:37:35 GMT
Transfer-Encoding: chunked
Connection: keep-alive, Transfer-Encoding

例如,参见 Cache-Control: max-age=29

If this is a known server behavior I would also like to know.

但是,时间上的差异也可能是由网络服务器上的缓存引起的。页面或其部分(服务器使用 分块模式 对此响应:Transfer-Encoding: chunked),可以暂时缓存服务器端 直到该部分需要更新。这将导致对数据库的新查询(这可能需要最多时间)、生成 html、压缩数据并将其再次写入服务器缓存。

关于java - 随后的 Socket 连接到网页需要不同的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34389271/

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