有一个网站在一天内的内容相当静态,但一旦更新,我们想知道它已被更改,我们想要阅读新内容。每毫秒都算是因为首先阅读这些信息具有竞争优势。
为此,我们使用HttpsUrlConnection,并告诉它不要使用缓存。 Https而不是Http的原因是我读过前者不太可能导致内容被缓存。
String urlText = "https://somewebsite.com/1234.xml" + "?unused=" + UUID.randomUUID().toString();
URL url = new URL(urlText);
HttpsURLConnection openConnection;
openConnection = (HttpsURLConnection) url.openConnection();
openConnection.addRequestProperty("User-Agent",
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:25.0) Gecko/20100101 Firefox/25.0");
openConnection.addRequestProperty("Cache-Control", "no-cache");
openConnection.setRequestMethod("GET");
openConnection.setUseCaches(false);
我们在循环中轮询并轮询,检查内容以检查是否已进行任何修改。页面内容大小为2k,非常小。
为了进一步防止任何缓存,我们在URL的末尾添加一个未使用数字的随机参数,以使目标服务器认为它是一个不同的请求。随机数每次都会改变。这个想法是,一旦内容发生变化,我们就会得到一个新版本的页面而不是旧版本。
目前,平均检查时间约为110毫秒。我知道使用靠近目标服务器的VPS会有所帮助,但除此之外,在每毫秒至关重要的情况下还有什么可以改善性能?
目前,我们每次循环都会创建一个新的openConnection,因为我们每次都有一个新的URL(因为随机数参数在每次迭代时都会发生变化)。但这是一个额外的开销吗?我们能否以某种方式重用连接以减少SSL握手,同时仍然将URL更改为具有不同的未使用参数?
启动多个独立线程,每个轮询相同的URL,有帮助吗?第一个注意到页面已经改变了胜利。最好有10个线程检查,而不仅仅是一个。或者是......
还有其他想法吗?