我有一個Web應用程序,其中兩個主要組件是網站(在Groovy和Grails中實現)和後端RESTful Web服務(使用JAX實現-RS(Jersey)和Spring)。這兩個都將在Glassfish中運行。該網站將調用RESTful Web服務。在很多情況下,這些組件將駐留在不同的服務器上,因此網站將通過網絡撥打RESTful Web服務。但是,如果我在同一個Glassfish服務器上運行這兩個應用程序,是否可以進行優化以避免網絡調用?換句話說,我正在尋找一些等價的用於REST的EJB遠程/本地接口。謝謝!當REST客戶端和服務器在同一臺服務器上時,如何避免網絡調用
回答
不要出汗網絡電話。您的流量通常不會離開本地界面,因此您不會佔用任何帶寬。你從序列化/反序列化中失去了一點性能,但是你需要問自己是否值得開發一個複雜的代理體系結構來減少這種影響。我想大多數情況下你會發現答案是否定的。
不知道你會發現任何微不足道的解決方案:你當然可以添加自己的附加代理層,但我真的不會擔心它。本地網絡I/O(本地主機或127.0.0.1)無論如何都是非常優化的,你真的不會注意到。
根據您的實現,Spring支持多種遠程技術(舊列表爲http://static.springsource.org/spring/docs/2.0.x/reference/remoting.html),但您會發現所有這些的關鍵在於網絡傳輸:它們以各種不同的方式將其封裝起來但最終幾乎所有的交鑰匙遠程技術都會在某個時間點進入網絡。您可以通過不必使用HTTP來獲得某些效率,但是您可能會失去使用Jersey所獲得的一些鬆散耦合。
如果你不太害怕緊密耦合,也許你可以把你通過Jersey公開的實際對象放到一個Glassfish範圍內的Spring上下文中,直接調用方法:儘管更緊密的耦合,所以我會說堅持HTTP調用。
是的,如果您的服務器和客戶端都駐留在同一個JVM中,則可以避免網絡調用。您應該能夠使用Jersey Client API創建您自己的Connector實現來覆蓋默認的HTTP調用並處理請求/響應。這裏是可以讓你開始的博客 - http://www.theotherian.com/2013/08/jersey-2.0-server-side-client-in-memory-connector.html
恕我直言,應該不惜一切代價避免不必要的網絡開銷。即使這種開銷只有幾毫秒,但是在爲您的Web應用程序構建功能時,您可能會增加這種服務調用,所有這些毫秒會爲您的應用程序帶來很大的延遲。
- 1. WCF客戶端和服務在同一個服務器上的網絡服務
- 2. WWF服務和ASP.NET客戶端在同一臺服務器上
- 3. 如何避免在後臺客戶端服務器斷開GKSession
- 4. Java網絡 - 客戶端和服務器
- 5. 當服務器和客戶端在同一臺機器上時收聽廣播
- 6. 客戶端 - 服務器網絡入門
- 7. C++服務器/客戶端網絡
- 8. SFML網絡服務器/客戶端
- 9. 如何創建Rest Web服務客戶端和服務器
- 10. 客戶端和服務器使用同一臺機器
- 11. REST API和客戶端在同一臺服務器上,需要API認證?
- 12. 如何在客戶端登錄時在服務器上的網絡服務帳戶中觸發服務?
- 13. 客戶端網絡服務
- 14. 節點 - 充當網絡服務器和客戶端
- 15. 不同網絡上的客戶端 - 服務器IP
- 16. 如何在網絡客戶端上從網絡服務器上創建文件
- 17. Java:如何讓客戶端檢測網絡上的服務器?
- 18. Web服務客戶端和服務器
- 19. 避免在REST服務器(客戶端= Android)上發生意外請願
- 20. 服務從網絡服務器二進制文件,客戶端
- 21. 如何在一臺服務器上創建多個客戶端?
- 22. 服務器和客戶端
- 23. WCF如何檢測客戶端和服務器是否在同一臺服務器上
- 24. Java客戶端/服務器 - 我們可以使服務器作爲客戶端到另一臺服務器嗎?
- 25. 如何在客戶端和服務器端中止對web服務的調用?
- 26. 客戶端到服務器端調用
- 27. 如何處理在一臺服務器上運行的多REST客戶端
- 28. Android客戶端 - Java服務器:一臺服務器可以同時支持多少個客戶端?
- 29. 服務請求在客戶端在同一臺服務器上進行服務時排隊
- 30. 同一臺機器上的Git客戶機和服務器
感謝您的提示。這是我懷疑的,但確認真的有幫助。 – MJM 2011-06-20 16:19:18