Implementazione della cometa per ASP.NET? [chiuso]


103

Ho cercato modi per implementare la messaggistica simile a Gmail all'interno di un browser e sono arrivato al concetto di Comet . Tuttavia, non sono stato in grado di trovare una buona implementazione .NET che mi consenta di farlo all'interno di IIS (la nostra applicazione è scritta in ASP.NET 2.0).

Le soluzioni che ho trovato (o potrei pensare, del resto) richiedono di lasciare un thread in esecuzione per utente, in modo che possa restituirgli una risposta una volta ricevuto un messaggio. Questo non scala affatto, ovviamente.

Quindi la mia domanda è: conosci un'implementazione ASP.NET per Comet che funziona in modo diverso? È possibile anche con IIS?


12
Immagino che l'implementazione iniziale di MS blessed sia SignalR: hanselman.com/blog/…
user423430

Node.JS è ora supportato su Azure, presto sarà supportato anche IIS nel 2003. Ciò significa che saremo in grado di eseguire il server comet all'interno di IIS ( windowsazure.com/en-us/develop/nodejs )
goodguys_activate

Risposte:


44

Comet è difficile da scalare con IIS a causa della connettività persistente di comet, ma ora c'è un team che sta esaminando gli scenari di Comet. Guarda anche il blog di Aaron Lerch perché credo che abbia svolto alcuni dei primi lavori su Comet in ASP.NET.


9
Questo è effettivamente implementato; controlla WebSync, per la risposta di Anton di seguito. ( frozenmountain.com/websync )
jvenema

3
Qualcuno ha chiamato ajax inverso? controlla questo: pokein.codeplex.com
Zuuum

4
I controller MVC Async possono aiutare a combattere i problemi di IIS scaricando l'attesa su thread di lavoro non IIS, vedere questo fantastico post di Clay Lenhart . Vedi anche Progetto di esempio di Chat Server su BitBucket.
Jacob,

33

WebSync è un server Comet scalabile conforme agli standard che si integra direttamente nella pipeline IIS / .NET. È anche disponibile su richiesta come servizio in hosting.

Supporta ufficialmente fino a 20.000 connessioni client simultanee per nodo server, ma i singoli test hanno visto arrivare fino a 50.000. La velocità effettiva dei messaggi è ottimale intorno al limite di 1.000-5.000 client simultanei, con messaggi recapitati fino a 300.000 al secondo da un singolo nodo.

Include il supporto lato client per JavaScript, .NET / Mono, iOS, Mac OS X, Java, Silverlight, Windows Phone, Windows Runtime e .NET Compact, con supporto lato server per .NET / Mono e PHP.

Il clustering è supportato usando SQL Server o la cache di Azure, ma è possibile scrivere provider personalizzati per qualsiasi cosa (Redis, NCache).

Disclaimer: lavoro per l'azienda che sviluppa questo prodotto.


17
dovrebbe esserci un disclaimer qui, poiché è il tuo prodotto ...
Sam Saffron

9
Certo, è prodotto dall'azienda per cui lavoro :) Sicuramente non cerco di nascondere nulla.
Anton

1
@Anton - non nascondere qualcosa non è come rivelarlo.
RedFilter

1
@Anton Puoi approfondire come supporta fino a 20k connessioni client simultanee per nodo del server? Questi numeri sembrano, beh .. "troppo grandi".
Pacerier

1
Non credo che sarebbe prudente chiedere come funziona websync sotto il cofano, concettualmente, da una vista di 25.000 piedi, ovviamente.
nocarrier

15

Di recente ho scritto un semplice esempio di un server di chat con polling lungo utilizzando controller asincroni MVC 3 basato su un ottimo articolo di Clay Lenhart

Puoi utilizzare l' esempio su una distribuzione di AppHarbor che ho impostato in base all'origine dal progetto BitBucket.

Inoltre, ulteriori informazioni disponibili dal mio post sul blog che spiega il progetto .


mi piace l'esempio su una distribuzione di
AppHarbor

'post del blog che spiega il progetto' -> web.archive.org/web/20130328042214/http://…
jaybro

Grazie! Mi fa piacere che ti sia piaciuto l'articolo.
Clay Lenhart

4

In realtà ci sono molte scelte per creare un sito Web supportato da ajax con ASP.NET ma, onestamente, PokeIn è il modo più semplice per creare un'applicazione web supportata da ajax cometa. Ha salvato uno dei progetti della mia azienda.


3

Potresti anche guardare il Kaazing Enterprise Gateway che ha rilasciato una versione di produzione del loro gateway webSocket [HTML5] che sostituisce completamente il modo comet e abilita connessioni full duplex tra browser e server delle applicazioni.

Potresti anche guardare le demo di Light Streamer


1

Una volta ho usato un sito di chat molto tempo fa che utilizzava un server di streaming http personalizzato. In realtà ho riprodotto quel software a un certo punto per pura curiosità, ed è abbastanza facile da fare, penso. Non proverei mai a implementare un tipo simile di "richiesta infinita" in IIS, specialmente in ASP.NET, perché le richieste legano un thread del pool di thread (o un thread IO, se vengono utilizzati gestori asincroni) indefinitamente, il che significa che puoi solo gestire così tanto per server quanto la configurazione del pool di thread consente.

Se avessi un forte bisogno legittimo di tale funzionalità, scriverei onestamente un server http personalizzato per questo.

So che in realtà non risponde alla tua domanda, ma ho pensato che l'input potrebbe essere rilevante.


1

Il gruppo WS-I ha pubblicato qualcosa chiamato "Reliable Secure Profile" che ha un'implementazione Glass Fish e .NET che apparentemente interagiscono bene.

Con un po 'di fortuna è disponibile anche un'implementazione Javascript .

Esiste anche un'implementazione Silverlight che utilizza HTTP Duplex. È possibile collegare javascript all'oggetto Silverlight per ottenere callback quando si verifica un push.

Esistono anche versioni commerciali a pagamento .



2
( psst )

0

Penso che l'approccio Comet non sia realmente scalabile a meno che non si sia pronti ad espandere la web farm orizzontalmente (aggiungendo più server web al mix). Il modo in cui funziona è che lascia una connessione TCP aperta per sessione utente, solo in modo che il server possa inviare cose in quella connessione di tanto in tanto per informare immediatamente l'utente di una modifica o attività.


6
Tutto è scalabile solo verticalmente fino a un punto, dopodiché deve aver luogo il ridimensionamento orizzontale.
Anton
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.