Java 到网页的后续套接字连接需要不同的时间
我最近一直在问一些问题,希望这将是最后一个问题(至少我回答了其中一个!) 我有以下直接代码,通过套接字连接到网页(这里的参数是buzzfeed.com网站的IP地址): 此代码可以工作并打印buzzfeed.com的HTML源代码。然而,这个程序的第一次调用(我只是一次又一次地启动这个程序),总是要花费两到三倍于后续调用的时间,发生在很短的时间内。例如:Java 到网页的后续套接字连接需要不同的时间,java,sockets,http,caching,server,Java,Sockets,Http,Caching,Server,我最近一直在问一些问题,希望这将是最后一个问题(至少我回答了其中一个!) 我有以下直接代码,通过套接字连接到网页(这里的参数是buzzfeed.com网站的IP地址): 此代码可以工作并打印buzzfeed.com的HTML源代码。然而,这个程序的第一次调用(我只是一次又一次地启动这个程序),总是要花费两到三倍于后续调用的时间,发生在很短的时间内。例如: 第一次调用(1500毫秒) 秒调用(紧接着)-600毫秒 此调用(紧接第二次调用之后)-400毫秒 然后,如果我等待20秒,我们返回到“第
- 第一次调用(1500毫秒)
- 秒调用(紧接着)-600毫秒
- 此调用(紧接第二次调用之后)-400毫秒
// don't keep connections alive.
System.setProperty("http.keepAlive", "false");
// do not cache dns.
java.security.Security.setProperty("networkaddress.cache.ttl" , "0");
但它不起作用。我是否遗漏了一些属性或解释?我可以用其他一些“setProperty”来统一时间?更好的是,如果这是一个缓存问题,我如何处理这个缓存?究竟缓存了什么?我正在直接连接到IP地址
如果这是一个已知的服务器行为,我也想知道。请注意,这种情况并不总是发生,例如,连接到stackoverflow(104.16.33.249)会产生不同的响应时间(即使在这种情况下,后续响应似乎也要快一点)。它与静态页面和动态页面相关吗?我有点困惑,希望得到任何答案
谢谢
- 第一次调用(1500毫秒)
- 秒调用(紧接着)-600毫秒
- 此调用(紧接第二次调用之后)-400毫秒
保持活动-
和缓存头文件的实际情况,以及不同的计时
例如,以下是www.buzzfeed.com返回的标题:
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();
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
例如,请参见缓存控制:max age=29
如果这是一个已知的服务器行为,我也想知道
但是,时间上的差异也可能是由Web服务器上的缓存引起的。页面或其部分(服务器对此响应使用分块模式
:传输编码:分块
)可以临时缓存到服务器端,直到需要更新该部分。这将导致对数据库进行新的查询(这可能需要花费最多的时间)、生成html、压缩数据并再次将其写入servercache。非常感谢您的回复。我不知道所有这些HTTP头,它们很有意义。我将在我的代码中测试它们。再次感谢!