Il problema è che i server Web tradizionali utilizzano un approccio thread per socket per la gestione di utenti concorrenti che non è sempre ottimale per le tecniche di polling lungo/comet. (Le versioni più recenti di IIS hanno comunque un modo per collegare i gestori di connessione, che otterrò anch'io.)
Per i server Web tradizionali, più spesso l'obiettivo è ottenere una connessione, servire l'utente qualcosa il più rapidamente possibile e passare alla connessione successiva. Se una connessione è persistente per un lungo periodo, è perché probabilmente sta facendo qualcosa di intensivo, come un grande download o una query enorme, ma nel complesso sta utilizzando attivamente la CPU, quindi il modello con thread funziona piuttosto bene.
In cometa (polling lungo), normalmente ci si connette a un server Web in cui si attende solo un evento, e il più delle volte. Ciò promuove più connessioni simultanee. Anche chacnes è che molti di questi utenti stanno aspettando che gli stessi eventi si verifichino su tutta la linea.
L'allocazione di una discussione quindi per un utente principalmente per lo spin e l'attesa non è un modello ottimale per questo tipo di cose. Un modello migliore è un server Web basato su event loop che fa tutto in un modo asincrono di moda e dove l'invio di un evento a più utenti non implica un costoso switch di contesto per ciascun client. Questo è ciò su cui è costruito Node.js (usando libevent come core), Ruby Eventmachine, Twisted Python, Tornado di Friendfeed, Jetty e il server Manos basato su C#.
Ecco perché spesso è più vantaggioso che la cometa esegua sul proprio processo un server personalizzato, poiché i server Web tradizionali come Apache e le versioni precedenti di IIS non funzionano in una materia che è efficiente per le esigenze di Comet.
Le applicazioni ASP.NET standard sono un po 'avvitate perché il pool di thread in .NET è limitato a 25 thread generali e 25 thread IO (e le connessioni http accettano un thread IO). Potresti essere effettivamente limitato ad essere leggermente inferiore a quello in realtà perché il pool di thread è condiviso con tutte le altre cose in .NET. Puoi eseguire il dump del pool di thread anche se con un'impostazione di configurazione, tuttavia, ma le prestazioni tendono a decadere in modo esponenziale più thread entri. In teoria potresti aumentare questo numero se puoi garantire che non crescerai troppo e quindi probabilmente usa solo monitor di thread standard in .NET per creare il tuo oggetto di dispatching di eventi comet.
Tuttavia, le app .NET che eseguono versioni più recenti di IIS hanno comunque un raggio di speranza. È possibile creare un numero personalizzato IAsyncHttpHandler. Ci sono alcune ottime guide online per te a leggere come funziona. Con questo puoi creare il tuo pool di connessione e servire i tuoi clienti in modo più efficiente. Non è una soluzione perfetta e devi costruire molti impianti idraulici per conto tuo. WebSync è un prodotto commerciale che include questa interfaccia per te e ti offre alcuni pezzi di framework di alto livello con cui puoi lavorare.
Credo che il nodo non sia disponibile su Windows, potrei sbagliarmi. – Robert