2012-12-05 83 views
2

我正在使用webcrawler。每個請求都可以執行很多請求(比如每秒500-1000次),而不需要創建線程(我不是指線程池,重用等等)?在Java中每秒執行很多http請求的有效方法

+2

你不想線程池和線程的重用,但你不希望創建線程,但還沒有什麼你問的幾乎要求高並行。我不明白你期望作爲答案。 – Brian

+1

出於好奇,你是否知道[Nutch](http://nutch.apache.org/)或任何[其他Java Web爬蟲](http://java-source.net/open-source/crawlers )?你爲什麼要寫自己的? – willglynn

+0

1.我只是想要500到1000個同時連接到不同的服務器。我的測試表明,很難有500-1000個線程同時運行。所以我正在尋找更便宜的方式來建立連接。 2.我正在和Nutch合作。首先,很難訪問原始文件。此外,它工作5-6小時後會減慢。可以通過羣集來提高性能,但無論如何我不知道爲什麼它默認情況下工作得很慢。我也檢查了Heririx,並面臨類似的問題 - 性能下降,文檔缺乏,H3中可怕的彈簧配置。 – hudvin

回答

1

我想你在這裏想要的是一個線程可以同時處理n個請求。

現在,這意味着交錯處理2個線程的步驟。這隻有在有一些「阻塞」操作時纔有意義。

現在有人會說,是的,我們會阻止。所以,我要的是

  1. 請求1是由和我等待響應
  2. 發起請求2在等待1秒請求的響應來響應。
  3. 獲取請求1的響應並處理它
  4. 獲取請求2的響應並處理它。

這隻有在HTTP是「異步」的情況下才有可能。不幸的是,它不是。 (好的讀 - >http://wiki.answers.com/Q/Why_http_is_asynchronous) 有一些「異步」的HTTP客戶端,它執行瀏覽器中的AJAX。

它允許啓動呼叫的線程繼續。響應在回調中提供。

事實是,他們有一個線程池同時處理這些調用。只有它看起來異步。

Exampe:

http://hc.apache.org/httpcomponents-asyncclient-dev/index.html

相關問題