【问题标题】:Best way to maintain huge amount of connections in Java在 Java 中维护大量连接的最佳方法
【发布时间】:2011-08-08 07:13:29
【问题描述】:

我想知道在多线程应用程序中维护大量小型 TCP 连接而不在一段时间后锁定的最佳解决方案。

假设我们必须在多线程中访问许多 http 网站(例如不同域、服务器等上的约 200 000 个网站)。 Wich 类是做最安全连接的最佳选择(我的意思是大多数抗锁性,不是多线程锁,而是 TCP 连接,它“不会对任何事情做出反应”)。 HttpURLConnection 和 BufferedReader 会在设置连接和读取超时的情况下完成这项工作吗?我在使用简单解决方案时看到了这一点:

URL url = new URL( xurl );
BufferedReader in = new BufferedReader( new InputStreamReader( url.openStream() ) );

所有线程在 2-3 小时后被锁定/死机。

最好让恒定线程(例如 10 个始终运行并请求 URL 从主线程获取)或者更好地为每个 url 创建一个线程,然后以某种方式杀死它,如果它在一段时间后没有响应? (如何杀死子线程?)

【问题讨论】:

  • 是否有“小”TCP 连接?
  • 我认为这是另一个网络爬虫?您是否查看过其中一些已经存在的来源?
  • 我想,他们应该活不到 5-10 秒,传输不超过 100-200KB
  • @Peter Lawrey 你能推荐我一个,它的写法是,它不会在下水期后锁定吗? (我不知道任何爬虫)
  • 考虑使用jboss.org/netty 有标准的方法可以杀死那里没有响应的连接。

标签: java multithreading http tcp


【解决方案1】:

如果是 HTTP 连接,我真的怀疑你是否可以缓存它们。因为保持 HTTP 连接活动不仅在客户端,它也需要服务器端的支持。大多数情况下,服务器会在超时期限(在服务器中配置)之后关闭连接。因此,请检查服务器端配置的最大超时时间以及您希望将连接缓存多长时间。

【讨论】:

  • 我不想保持连接。我想尽快断开连接,因为每个连接都连接到其他服务器(域)
  • 对不起,我在这里很困惑。你不会尽可能快地断开连接吗?那么,您什么时候断开连接?
  • 已编辑。我想在页面 html 加载后立即断开连接。这个问题是关于连接到一些稀有服务器时的一些超时或 TCP 连接锁定,这会导致像我的示例中那样简单的连接永远挂起
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-07
  • 1970-01-01
  • 2014-10-13
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 2014-12-26
相关资源
最近更新 更多