爲什麼不安排一個線程每分鐘獲得一次天氣,並將其暴露給JSP,而不是讓每個JSP都得到它自己的天氣報告?
對於您和雅虎來說,這樣做效率更高,JSP只需查找本地對象(幾乎是瞬間的),而不必連接到Web服務。
編輯
在這個答案的評論一些新的要求提出解決方案,選擇一個不同的方式。
似乎不僅天氣不僅不會經常改變,而且對每個用戶來說都是一樣的,但是網絡服務還需要其他數據,比如飛行數據。
飛行數據檢索的要求與天氣數據的要求非常不同。所以我認爲你應該定義幾種類型的(遠程)數據,併爲每個類別選擇不同的解決方案 。
至於我會使用一些簡單的要求依據:
- 用戶喜歡他們的信息及時,他們不喜歡等待存儲在Web服務器上的數據
- 的量是有限的
- 遠程Web服務具有各種EULA,並且可能不滿意來自同一個源的相同數據的200個併發請求(您)
對用戶的快速數據訪問是最好的通過在本地獲取數據來獲取信息,無論是暫時的(保存在bean中)還是持久的(本地數據庫)。這可以通過定期從遠程源請求數據並使用JSP中的緩存數據來完成。這也會讓你清楚地知道第三點。
存儲在Web服務上的有限數據意味着並非所有內容都可以被緩存。每個用戶不同的數據或者可能會在很短時間內發生變化的大型數據集不能被緩存。每隔一分鐘左右在美國所有機場的所有航班上加載數據並不是一個好主意。必要時運行特定的Web服務查詢可以更好地滿足這類請求。
現在的技巧是確定緩存數據何時可行。如果可行,請執行此操作,否則在後臺運行Web服務查詢。這可以通過呈現JSP 現在並在後臺啓動Web服務查詢來完成。 JSP可以有一個AJAX腳本,用於查詢Web服務器是否準備好數據,並在準備就緒時將該數據插入頁面。
+1 - 偉大的一點。天氣沒有那麼快變化。 – duffymo 2010-04-11 14:30:37
雅虎天氣服務是我們使用的幾種服務之一,我們也經常使用其他服務,例如獲得航班等的可用性,在這種情況下,我不能安排東西:) – Sudheer 2010-04-11 14:32:47
然後分解請求,您的網站的部分將加載比其他人慢,顯示經典搜索動畫。您無法對第三方「免費」服務提出要求。如果您正在爲航班可用性服務付費,請讓他們加強遊戲。 – whatnick 2010-04-11 14:35:36