2

私はWebCrawlerを実行していますが、サーバーにリクエストが過負荷にならないようにしたいので、時間によってサーバーへのアクセスを制限します。

アクセスするリンクのリストであるオブジェクト/コレクションがあります。

私は最初のリンクを取得し、それはGoogle(例)からのものです。アクセスしてすべての作業を行います。20秒後(例)にGoogleからの別のリンクしか取得できず、待機している間、他のドメインからのリンクを取得します。

要約すると、その中のオブジェクトを分類し、決められた間隔でそこからオブジェクトを取得できるコレクションが必要です。

これに似たものはありますか?そうでない場合、実装でどのコレクションを使用することをお勧めしますか?このコレクションには、さまざまなスレッドからアクセスできます。

4

1 に答える 1

7

これにはDelayQueueを使用できます。これは、アイテムが「期限切れ」になった場合にのみアイテムを取得できる同時コレクションです。追加するアイテムは、Delayedを実装する必要があります。

また、 ScheduledExecutorServiceを使用することもできます。たとえば、クロールしているドメインごとに、次のリンクを取得するタスクをスケジュールしてから、次のリンクで別のタスクを再スケジュールすることができます。

于 2011-06-27T19:59:51.057 に答える