2014-07-25 37 views
0

我有一個Servlet從客戶端獲取請求,然後Servlet通過http請求/響應(每個服務器需要1秒響應)從5個不同的服務器收集數據並將數據發送回客戶端。JSP Servlet多線程Qustion

問題在於客戶端必須等待6秒才能響應時間太長。 因此,5個服務器的請求必須同時發送。

思路:

  1. 多線程在Servlet中,就像一個普通的Java應用程序。
  2. 爲每個服務器(請求)提供一個自己的Servlet,以便1個主Servlet向5個收集Servlet指出「獲取數據xy」,收集Servlet將數據發送到主Servlet並將主Servlet發送回客戶端。

我擔心的問題是,線程/ servlet從另一個請求獲取響應,因爲它的時間和IP相同。

如何解決這個問題?謝謝!

+0

「我擔心的問題是,一個線程/ Servlet中的另一個請求得到respons,因爲它的同一時間和同一個IP地址。」 - 你能闡述這個 – coreJavare

回答

2

多線程在Servlet

可以使用ServletRequest#startAsync()方法把此請求轉換成異步模式中,並初始化其與原始(展開)的ServletRequest和ServletResponse的對象AsyncContext。

閱讀更多關於Servlet 3 0 final-spec - Section 2.3.3.3 - Asynchronous processing的地方詳細解釋。

AsyncContext的Servlet 3.0規範定義處理HTTP的標準方式請求異步


瞭解更多關於Executors.newFixedThreadPool()創建一個可重用不受限制的隊列操作線程的固定數目的線程池。在任何時候,最多nThreads線程都將被激活處理任務。如果在所有線程處於活動狀態時提交其他任務,則它們將在隊列中等待,直到線程可用。

請查看ExecutorService以閱讀更多關於它的示例代碼。

Read more...

+0

你HABE一個小例子爲了我?例如,我在doGet方法中:1. String a = method1(); 2.字符串b = method2();.我想處理1.和2. Async AG在同一時間 – user3876178

+0

找到它[這裏](https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3) – Braj

+0

THX,但我沒有得到它。在所有例子中,一個長時間運行的任務會被外包到一個新線程中併發送回客戶端。但我有5個任務,我只想同時運行,並將所有數據收集在一個servlet中,然後處理併發送回客戶端。 – user3876178