2012-10-06 15 views

risposta

12

Questo è di progettazione. I due processi di lavoro non condividono lo stato ei client verranno distribuiti tra di loro in base al round robin, il che significa che il 50% si connetterà al processo A e il 50% al processo B. Poiché il bus del messaggio SignalR sottostante è in memoria da default, il processo A non vede i messaggi dal processo B.

Quello che stai configurando è chiamato "web garden" (da non confondere con "web farm") ed è comunemente usato per rendere le applicazioni difettose più reattive (vedi this SO question). Poiché SignalR è stato progettato da zero con in mente la scalabilità, questa configurazione non ti darà alcun vantaggio.

mia raccomandazione è di mantenere il limite di processo di lavoro a 1.

V'è tuttavia un modo per farlo lavorare con giardini web: avresti bisogno di utilizzare un bus messaggio esterno come Redis o Windows Azure Service Bus (dettagli possono essere trovati nel docs) per la condivisione di messaggi tra i processi, che naturalmente introduce ulteriore latenza di rete.

+0

Questo risponde esattamente alla mia domanda. Ho problemi di perdite di memoria e devo riciclare periodicamente i pool di applicazioni. Gioco con il web garden per vedere se aiuta. Grazie. – Naptime

+0

Si prega di aggiornare questa risposta con il collegamento diretto alla documentazione, all'indirizzo: http://www.asp.net/signalr/overview/performance/scaleout-in-signalr. Inoltre, ho un'obiezione: non mi piace la raccomandazione di mantenere il limite del processo di lavoro a 1. Sicuramente ci sono benefici nell'usare più di 1. La documentazione mostrerà all'utente come farlo funzionare con più di 1 processo di lavoro senza limitando le sue opzioni. – Icarus

+0

@lcarus grazie, ho aggiunto il collegamento diretto. Comunque lascerò la mia raccomandazione di un processo di lavoro. Mentre un web garden ha alcuni vantaggi in certi casi d'uso, la stragrande maggioranza degli utenti non dovrebbe averne bisogno. –

Problemi correlati