如何打开很多HttpURLConnection?

时间:2014-09-22 16:33:37

标签: java multithreading http httpurlconnection http-response-codes

我试图实现一个简单的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连接并检查响应代码?

提前谢谢大家!

0 个答案:

没有答案