Con 2 server Web, una classe singleton avrà 2 istanze?Con 2 server Web, una classe singleton avrà 2 istanze?
risposta
Entrambi i server Web avranno istanze separate dei loro processi di applicazione sia .net o java. Quindi Sì, entrambi i server avranno le loro singole istanze della classe singleton.
Indipendentemente dal fatto che questi due server Web siano due macchine fisiche diverse, anche se si trovano sullo stesso server, funzioneranno sicuramente su processi diversi. Ogni processo caricherà i suoi oggetti in memoria separatamente da qualsiasi altro processo.
specifically in case of asp.net
- Anche nel singolo server Web, ogni sito causerà un'istanza separata della classe Singleton. Poiché ogni sito nel processo di lavoro di asp.net viene caricato in un dominio dell'applicazione separato, non è possibile che due domini interferiscano tra gli oggetti degli altri. Quindi, in caso di asp.net, anche il singolo server web con un singolo processo di lavoro asp.net può/avrà più istanze della classe singleton separate ciascuna da un'altra.
Ottima risposta. Sono contento di vedere i processi di lavoro coperti fino al fatto che ogni richiesta è indipendente dalle altre. Molti dev lo dimenticano. – NotMe
ogni richiesta o ogni sito web? ogni sito web può avere il proprio dominio di applicazione, ma sembra che tu stia dicendo ogni richiesta web? confuso. – Blankman
Vero. Ho corretto la risposta. –
Sì, si dispone di un Singleton per ogni JVM e anche di caricatori di classe.
Vedere questo articolo When is a Singleton not a Singleton? (per Java).
Cosa intendi per "2 server Web"? Il campo statico (in singleton) è limitato al dominio dell'applicazione (in .net).
Quindi, se i due server Web vengono eseguiti in due domini dell'applicazione separati, quindi sì, altrimenti no.
In effetti si potrebbero avere 2 istanze di chiamate singleton in UN server Web, se la sua parte di una webapp viene distribuita due volte.
In Java, il classloader fa parte dell'identità di una classe. Puoi caricare la stessa classe due volte con diversi programmi di caricamento classi e tutti i campi statici esisteranno due volte. C# ha un meccanismo simile.
per classloader intendi un contenitore come tomcat corretto? (per un'app Web) – Blankman
@Blankman: no, intendo la classe java.lang.ClassLoader. Contenitori come tomcat usano un classloader diverso per ciascuna applicazione che distribuiscono, impedendo loro di interferire tra loro; ogni app può avere istanze separate di classi singleton e ogni app può utilizzare versioni diverse della stessa classe. –
Come un'estensione di questa domanda, in particolare per le applicazioni Web .NET, è necessario prestare attenzione alla gestione di SessionState. Supponendo che le sessioni non siano "appiccicose" (l'utente rimane su un server Web una volta stabilita la sessione), è necessario modificare SessionState in out-of-process. Questo può essere il server di stato della sessione ASP.NET o SQL Server, ma il punto chiave da ricordare è che SessionState non viene condiviso automaticamente tra i server, a meno che non venga reso condiviso da out-of-process. Inoltre, tutto ciò che inserisci in SessionState deve essere serializzabile; aggiungi l'attributo [Serializable] a qualsiasi classe che usi in SessionState.
Non esattamente sull'argomento qui ... – NotMe
Non su argomento, d'accordo, ma è molto probabile che il prossimo problema lo incontrerà. –
È possibile creare un server Web che eseguirà il multiplex su tutto: connessioni, socket di ascolto e persino interfacce. Rimarrà ancora un'istanza della classe, solo un thread, e per di più un footprint di memoria piuttosto piccolo. L'avvertenza è che, mentre dalla maggior parte dei punti di vista pratici assomiglierà a due server, sarà sempre un solo server (e se si blocca, si blocca tutto ...)
Questo approccio non è così popolare come multi Tuttavia, poiché è più leggero sull'hardware, è più difficile da gestire per lo sviluppatore: è necessario moltiplicare esplicitamente ogni cosa e destreggiarsi tra tutte le connessioni nelle chiamate non bloccanti. Se si generano alcuni thread aggiuntivi, il sistema operativo richiede molto lavoro da parte dell'utente, consentendo di scrivere un server più ricco di funzionalità più semplice.
Ovviamente anche in una generazione di server con un singolo thread di un secondo server in un'attività separata è ancora possibile, solo dall'utente/amministratore/chi esegue di nuovo il file binario, con configurazione diversa. Ci vuole una programmazione piuttosto elaborata per evitare che ciò accada.
Ecco perché JSP/Servlet fornisce l'idea di "sessione" e dati "applicazione". Questi dovrebbero essere condivisi tra i server in un ambiente multi-server.
- 1. diverse istanze di classe singleton
- 2. Una classe con 2 nomi?
- 3. Daga 2 singleton non funzionanti
- 4. Symfony 2 servizio con più istanze?
- 5. è @Singleton in Dagger 2 thread safe?
- 6. Websocket tra 2 server?
- 7. Dagger 2 iniettando più istanze dello stesso tipo di oggetto
- 8. AngularJs 2: più istanze di servizio create
- 9. Sono necessari 2 istanze di siti Web di Azure per SLA come i ruoli Web?
- 10. ASP.net Web API 2 controller con filtri di autenticazione multipli
- 11. classe Singleton in una libreria statica
- 12. Lato server reagire con Webpack 2 System.import
- 13. SQL Server Unisci 2 righe in 1
- 14. L'elenco in una classe Python condivide lo stesso oggetto su 2 diverse istanze?
- 15. Symfony 2 - Dove devo inserire una classe di utilità?
- 16. Symfony 2 web directory rename
- 17. web api 2 percorsi area
- 18. Trova elemento che ha classe 1 o classe 2
- 19. Iniezione presentatore con Dagger 2
- 20. Come testare una classe Singleton?
- 21. che deride una classe singleton
- 22. Dagger 2 nessuna classe generata
- 23. Socket Java HTTP/2 server
- 24. Classe Singleton contro classe con membro statico
- 25. istanze Ninject Memoize a Singleton Ambito
- 26. le istanze della classe Classe
- 27. Daga 2: Impossibile iniettare singleton in altro ambito
- 28. DB: prima confusione dell'autenticazione con l'API Web ASP.NET 2 + EF6
- 29. Iniezione Dagger 2 in classe Java non attiva
- 30. pyinstaller: 2 istanze della mia cherrypy applicazione exe ottenere eseguito
@David è una domanda giusta, se non sei esperto in queste cose potresti condividere i server Web in cluster con JVM. In effetti, non sarei affatto sorpreso se tali sistemi esistessero, anche se dubito che siano comunemente usati. –
@David M: inoltre, questa potrebbe essere una utile domanda/risposta per un principiante che sta imparando modelli di progettazione e non conosce ancora i "trucchi" di una Singleton –