使用2個Web服務器,單例類會有2個實例嗎?使用2個Web服務器,單例類會有2個實例嗎?
回答
這兩個Web服務器都將具有不同的應用程序進程實例,無論是.net還是java。所以是的,這兩個服務器將有你的單身類的個人實例。
無論這兩臺Web服務器是兩臺不同的物理機器,即使它們位於同一臺服務器上,它們也將完全在不同的進程上運行。每個進程都會將其對象與任何其他進程分開加載到內存中。
specifically in case of asp.net
- 即使在單個Web服務器中,每個站點也會導致單獨的Singleton類實例。由於asp.net工作進程中的每個站點都被加載到單獨的應用程序域中,因此兩個域之間不會互相干擾。所以在asp.net的情況下,即使具有單個asp.net工作進程的單個web服務器也可能會有多個單例類的實例,每個實例都與另一個單獨分離。
是的,你有一個單一的每個JVM甚至是類加載器。
看到這個When is a Singleton not a Singleton?文章(用於Java)。
「2 Web服務器」是什麼意思? 靜態字段(單身)的作用域爲應用程序域(在.net中)。
因此,如果你的兩個Web服務器運行在兩個獨立的應用程序域,那麼是的,否則不。
事實上,你可能在一個Web服務器中有2個單例調用實例,如果它是部署了兩次的Web應用程序的一部分。
在Java中,類加載器是類身份的一部分。您可以使用不同的類加載器加載相同的類兩次,並且所有靜態字段將存在兩次。 C#有一個類似的機制。
你的意思是像Tomcat的容器是否正確? (對於Web應用程序) – Blankman 2010-06-25 15:15:22
@Blankman:不,我指的是類java.lang.ClassLoader。像tomcat這樣的容器爲他們部署的每個應用程序使用不同的類加載器,從而防止它們互相干擾;每個應用程序都可以有單獨類的單獨實例,每個應用程序可以使用同一類的不同版本。 – 2010-06-25 15:34:26
作爲這個問題的擴展,特別是.NET web應用程序,您還需要注意SessionState處理。假設會話不是「粘性」(一旦會話建立,用戶就停留在一個Web服務器上),則需要將SessionState更改爲進程外。這可以是ASP.NET會話狀態服務器或SQL Server,但要記住的關鍵是SessionState不會自動在服務器之間共享,除非通過離開進程來共享。而且,你放入SessionState的任何東西都需要可序列化;將[Serializable]屬性添加到您在SessionState中使用的任何類。
不完全的話題在這裏... – NotMe 2010-06-25 14:23:47
不上話題,表示同意,但它很可能是下一個問題,他會遇到。 – 2010-06-25 14:31:04
有可能創建一個Web服務器,它將複用所有內容 - 連接,偵聽套接字,甚至是接口。它仍然是這個類的一個實例,只有一個線程,並且還有一個非常小的內存佔用。需要注意的是,儘管從大多數實際的角度來看它看起來像兩臺服務器,但它仍然只有一臺服務器(如果它崩潰,它會崩潰整個...)
這種方法不像多但是,由於在硬件上更輕,開發人員處理起來更加困難 - 您必須在所有內容之間進行顯式複用,並在非阻塞調用中處理所有連接。如果您產生了一些額外的線程,則操作系統會從您手中奪走大量工作,從而使您可以更輕鬆地編寫功能更豐富的服務器。
當然即使在一個獨立的任務的第二服務器的單個線程服務器產卵仍然是可能的,只是由用戶/管理員/誰再次執行二進制,具有不同的配置。它需要一些漂亮的花式程序來防止這種情況的發生。
這就是爲什麼JSP/Servlet的提供「會議」和「應用」數據的想法。這些應該在多服務器環境中的服務器之間共享。
- 1. WebApplication有2個單例類的實例
- 2. cassandra不會爲2個服務器創建正確的環(每個服務器有2個實例)
- 3. ASMX服務共享單個類實例
- 4. 具有多個實例的Symfony 2服務?
- 5. 服務器上有一個類有多少個實例?
- 6. 使用兩個cartalyst哨兵實例2
- 7. 控制位置:2個使用NSWINdowController的2個實例的XIB
- 8. 實例化並使用2個或多個JavaScript ES6類
- 9. 單個服務的多個實例
- 10. PHPUNIT - 返回實例化類2的同一個實例
- 11. Angular 2 - 實例化(Http)服務手動
- 12. 跨單元會話會保留一個php單例類實例嗎?
- 13. Angular 2單頁實例
- 14. 我可以在Google App Engine上實例化2個memcache類嗎?
- 15. Dagger 2創建單例實例
- 16. 單實例服務
- 17. AngularJs 2 - 創建服務的多個實例
- 18. Angular 2 - 每個模塊的唯一服務實例
- 19. 將類實例部署爲Web服務
- 20. Azure - 2個額外的小型實例或一個小實例
- 21. 你會爲2個類實現一個類或2個接口的接口嗎
- 22. ASP.NET Web服務實例?
- 23. 如何使用同一類intest的2個不同實例?
- 24. Angular 2單元測試 - 多個類實例
- 25. AWS MongoDB實例無法從Web服務器實例中訪問
- 26. Android服務多個實例
- 27. gRPC服務器可以基於另一個HTTP/2 web服務器,如jetty嗎?
- 28. 這個單例實現有問題嗎?
- 29. Windows服務:同一個服務類的多個實例?
- 30. 如何將一個類實例發送到Web服務?
@大衛這是一個公平的問題,如果你沒有這樣的事情,你可能一點集羣網絡服務器共享JVM專家。事實上,如果存在這樣的系統,我一點也不會感到驚訝,儘管我懷疑它們是否被普遍使用。 – 2010-06-25 14:07:29
@大衛L:再說,這可能是誰在學習設計模式和還不知道一個Singleton – 2010-06-25 14:09:30