【发布时间】: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