使用Java NIO进行数千个传出连接

时间:2015-12-11 18:58:12

标签: java proxy nio

我正在寻找快速解决方案来检查列表中代理的可用性(最多10k)。

如果我们可以连接它,代理是可用的,因此要检查10k代理,我们必须发出10k请求。由于连接超时设置为10秒,因此请求应该是并行的。

以下是现在检查可用性的方法:

private boolean isAvailable(Proxy proxy) {
    try {
        URL u = new URL(url);
        HttpURLConnection conn = (HttpURLConnection) u.openConnection(proxy);
        conn.connect();
        LOG.warn("Proxy " + proxy.address() + " is OK");
        conn.disconnect();
        return true;
    } catch (Exception e) {
        LOG.warn("Proxy " + proxy.address() + " is unavailable");
        return false;
    }
}

在Java中运行10k个线程并不是一个好主意,即使合理数量的32个线程也会给我们持续时间(10.000 / 32)* 10 = 3100秒。

所以我认为带有选择器的Java NIO是最好的选择,但是我不记得教程中的例子,这些例子旨在扩展那么多。我想像netty这样的第三方库可以轻松解决这个问题,但是我想看看如何用纯java来完成它。

此外,由于资源使用,我的方案是否有任何阈值?客户端连接是否消耗资源,因此最好只使用500个并发请求?这种情况是否存在理论上的最大值(除了端口数)?

0 个答案:

没有答案