2008-10-15 61 views
4

我正在研究Java中的Web應用程序,它通過AJAX調用從servlet獲取數據。Java Servlets:性能

該應用程序具有幾個頁面元素,它們以相當快的速度從服務器獲取新數據。

有了很多的用戶,在服務器上的需求有潛力獲得相當高的,所以我很好奇:

哪種方法提供最佳性能:

很多的servlet(一個用於每種類型的數據請求)?

或者:

一個servlet,它可以處理所有的請求?

回答

11

沒有性能的原因有多個servlet。在Web應用程序中,無論有多少個請求,只有一個servlet類的實例被即時處理。請求不是序列化的,它們是併發處理的,因此需要您的servlet是線程安全的。

+0

謝謝,我從來沒有什麼低電平對servlet究竟發生了相當明顯。 – 2008-10-15 12:16:56

2

struts framework在您的應用中使用了一個servlet。你的東西插入到一個servlet中。如果它適合他們,它可能會爲你工作。

0

就像託尼說的那樣,除非你需要分解一個複雜的Java Servlet類或者實現一個攔截過濾器,否則真的沒有理由使用多個servlet。

+0

1.你應該很少,如果有的話,將屬性添加到ServletContext。 2.你可以支持這個:「多個servlet絕對是原始速度的方式」?這是不正確的,如果你需要同步某些東西,你將不得不同步你是否有1或100個servlet – 2008-10-15 03:29:50

+0

1.只說ServletContext不是線程安全的,沒有關於良好的做法。來自「簡明英漢詞典」你對此絕對正確,對我而言,我會改變我的回答。我一直在想,我們可以通過多個小服務程序以小的方式避免線程阻塞。我的錯。 – 2008-10-15 03:57:16

1

擁有多項服務的一個可能的原因是,如果您需要擴展到多個服務器來處理未來的負載,那麼將單獨的服務移到它自己的服務器上比在「幕後」執行它更容易,如果一切都從一項服務中退出。這就是說,如果你有多個servlet,會有額外的維護開銷,所以這是一個兼顧未來靈活性和較低可維護性的問題。

1

如果您使用多個servlet,則沒有性能增強,因爲對於每個servlet請求都在單獨的線程中處理,前提是它不是單線程的。但是保持模塊化和代碼分離,你可以有多個servlet。

0

我相信你知道只要你在應用程序的web.xml文件中註冊了不同的節點,你就可以擁有同一個servlet的多個實例 - 也就是說,假設你想這樣做。

除此之外,從我的理解中,您可能會受益於彗星建築 - http://en.wikipedia.org/wiki/Comet_(programming)
在一些servlet容器上已經有了一些Comet的實現 - 下面看看如何使用Ajax和Comet - http://www.ibm.com/developerworks/java/library/j-jettydwr/。在決定你的架構之前,你應該學習。

BR,
〜一個