0

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 ...
}
4

1 に答える 1