2010-10-17 14 views
9

Sto provando a creare una soluzione di streaming per un'app interna, ma sto disegnando spazi vuoti affinché una soluzione possa superare un roadblock. Attualmente, nel mio esempio di lavoro, sto usando APE, ma a causa di restrizioni non posso avere processi in esecuzione estranei sul computer host, quindi non posso eseguire il server APE.Streaming con Node.js o qualsiasi altra soluzione di Comet

Sto cercando alternative, ma tutto quello che ho trovato finora ha richiesto processi in esecuzione sul server.

Alcuni dettagli sul progetto.

  • Ci saranno circa 25 persone collegate in una sola volta
  • Idealmente tutti dovrebbero vedere gli aggiornamenti, allo stesso tempo, non appena sono disponibili.
  • Sarà in esecuzione in un ambiente Windows, quindi le soluzioni C# /. NET sarebbero preferibili su cose come PHP.

Chiunque ha qualche idea, se node.js è in grado di gestirlo o di altre soluzioni?

+2

Credo che il nodo non sia disponibile su Windows, potrei sbagliarmi. – Robert

risposta

10

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.

+0

Correlati: Cometa per Azure/IIS: http://www.windowsazure.com/en-us/develop/nodejs/ – LamonteCristo

0

È possibile implementarlo da solo, utilizzando un lungo pooling. 25 richieste simultanee non dovrebbero essere un problema per IIS. Basta dare un'occhiata a ciò che i flussi APE ai client - è abbastanza pulito come reimplementarlo in 100 righe di codice (intendo la serializzazione nel formato compatibile).

1

WebSync sarebbe una buona soluzione per voi; funziona su IIS, quindi non sono necessari processi esterni. Dai un'occhiata allo here.

0

Hai guardato PubNub? Potrebbe essere in grado di gestire quello che stai facendo. Costa denaro, ma ottieni anche un sacco di transazioni gratuite. Non sei sicuro del tipo di carico che ti aspetti.

Problemi correlati