Java Web プログラミングは初めてです。Web クローラーを作成しようとしています。Crawler4jサンプル コードを使用しています。
私の問題は、再投稿リクエストを送信すると、クロール タスク (ブロッキング タスク) が完了するまでに時間がかかり、Heroku ホスティングのリクエスト タイムアウトが 3 秒であるため、同期クロール タスクを実行できないことです。同じプログラムがローカル マシンで問題なく動作します。
私が読んだところによると、基本/無料のオファーで Heroku のタイムアウトを変更することはできません。
これを非同期タスクとして起動し (CrawlerController.startNonBlocking() 関数を使用して実行できることはわかっています)、それが完了するのを待って、クロール操作の結果を表示できるかどうか疑問に思っていました。
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
String url = request.getParameter("url");
CrawlConfig config = new CrawlConfig();
String crawlStorageFolder = "/tmp/temp_storage";
config.setCrawlStorageFolder(crawlStorageFolder);
int numberOfCrawlers = 1;
config.setPolitenessDelay(1);
config.setMaxDepthOfCrawling(2);
config.setMaxPagesToFetch(5);
config.setResumableCrawling(false);
PageFetcher pageFetcher = new PageFetcher(config);
RobotstxtConfig robotstxtConfig = new RobotstxtConfig();
RobotstxtServer robotstxtServer = new RobotstxtServer(robotstxtConfig, pageFetcher);
CrawlController controller = null;
try {
controller = new CrawlController(config, pageFetcher, robotstxtServer);
} catch(Exception e){
e.printStackTrace();
}
controller.addSeed(url);
controller.start(Crawler.class, numberOfCrawlers);
// Methods showing the results of the crawling ...
}