我正在编写一个爬虫来爬取一些论坛内容,并且我所有的HTTP连接都使用Apache Http Client。 根据官方文档的建议,我对单个论坛服务器使用单个 Http 客户端,并且该客户端配备了 PoolingHttpClientConnectionManager 实例,可以同时通过多个执行线程执行多个请求。
此池连接管理器的一个重要属性是每个路由的最大连接数(默认为 2)。我很困惑哪个是最佳(一般)限制,可以确保爬行速度但不会使服务器超载?
(一般来说,我的意思是在不同情况下适用于一般论坛服务器的平均数量,因为我在初始化连接管理器时将其设置为静态)。
除此之外,如果有人知道如何根据 HttpClient 4.5 或其他类似库中的服务器反馈动态管理每个路由的限制,我将非常感激。
非常感谢您的帮助!
您可以这样配置:
@Bean
public CloseableHttpClient httpClient() {
return HttpClientBuilder.create()
.setMaxConnPerRoute(MAX_CONN_PER_ROUTE)
.setMaxConnTotal(MAX_CONN)
.setConnectionTimeToLive(120, TimeUnit.SECONDS)
.build();
}
至于动态管理每个路由的限制,我认为您每次都创建了一个新的 HttpClient。