我试图实现一个简单的URL可用性检查器,它基本上检查链接是否可用(没有返回HTTP 403,404等)。
我的数据库中有超过20,000个链接(到不同的服务器/网站)用于测试目的但是当我尝试创建超过10个线程时它似乎不起作用。
以下是我用于在每个WorkerThread中打开连接和读取响应代码的代码。
URL url = new URL(dto.getUrl());
httpUrlConnection = (HttpURLConnection) url.openConnection();
httpUrlConnection.setUseCaches(false);
// httpUrlConnection.setConnectTimeout(6000);
httpUrlConnection.setDoInput(true);
httpUrlConnection.setDoOutput(false);
httpUrlConnection.setRequestMethod("GET");
httpUrlConnection.setRequestProperty("Host", dto.getUrl().replace("http://", ""));
// httpUrlConnection.setRequestProperty("Connection",
// "Keep-Alive");
httpUrlConnection.setRequestProperty("User-Agent", USER_AGENT);
httpUrlConnection.setRequestProperty("Cache-Control", "no-cache");
httpUrlConnection.connect();
int code = httpUrlConnection.getResponseCode();
当多个线程打开连接时,我注意到几个问题:
1)只有前100-200个连接似乎打开没有问题,之后,我开始得到"读取超时","连接超时","连接重置& #34;但是,如果您尝试再次运行代码,那么抛出异常的链接将返回正确的响应代码(如果它们在前100个处理)。
2)响应代码有时无效(特别是如果在前100个链接之后处理了链接)。我注意到有时会返回404,实际上它应该返回200(我通过将链接放在前100个中来检查它)。
我确实尝试过使用Apache的Http客户端,但它也无法正确处理许多线程的链接。
所以有人知道这个问题的解决方案吗?使用HttpURLConnection使用多个线程可以打开的最大连接数是多少?有没有其他方法可以打开许多HTTP连接并检查响应代码?
提前谢谢大家!