Domanda

Contesto:Dalla mia interfaccia utente Web JavaScript, lancio un'operazione di lunga durata (diversi minuti) condotta sul backend .NET2.0.La chiamata restituisce immediatamente l'ID dell'operazione mentre l'operazione con esecuzione prolungata viene eseguita in parallelo.Le operazioni non richiedono un utilizzo intensivo della CPU, ma conducono chiamate di rete lente.Una volta completata l'operazione, voglio vedere i risultati nell'interfaccia utente web.

Domanda: Come posso avvisare il cliente quando il lavoro è finito?

Opzioni che ho considerato:

opzione 1:Lancio l'operazione a lunga esecuzione in modo asincrono direttamente da JS e mi aspetto che il valore restituito sia il risultato finale anziché un ID operazione.La mia libreria AJAX si prende cura di tutto e la vita sembra molto semplice e ordinata.Il problema è quello lato server il thread è un thread ThreadPool che ora blocco per diversi minuti.Non sono necessarie troppe richieste parallele di lunga durata per far morire di fame il ThreadPool e mettere in ginocchio l'intero server anche se la potenza di elaborazione è sufficiente.

opzione 2:Con l'ID operazione, inizio a interrogare il server se l'operazione è stata completata.Tuttavia, questo è un attacco di negazione del servizio contro il mio server.Inoltre, deve esserci una soluzione Ajax equa.Questo non è un problema unico.

È stato utile?

Soluzione

WebSync , un'implementazione della cometa per NET. Dovrebbe essere esattamente quello che stai cercando.

Altri suggerimenti

Polling, se fatto correttamente, non avrà un effetto notevole sul carico del server. Si consiglia di personalizzare l'intervallo di coprire meglio le specifiche del vostro lavoro del server - ad esempio non interrogare il server per almeno 2 minuti se si sa che l'operazione di solito richiede più tempo. Anche dopo che si sceglie una abbastanza grande intervallo di - per esempio 10 sec. Utilizzando una richiesta di servizio web o un gestore personalizzato minimizzerà il traffico e l'ora del server necessari per elaborare la richiesta.

Forse invertire Ajax è utile se non avrai troppi client concorrenti. Questo è talvolta chiamato cometa.

Reverse Ajax si riferisce ad un modello di progettazione Ajax che utilizza connessioni HTTP a lunga vita per consentire la comunicazione a bassa latenza tra un server web e un browser. Fondamentalmente si tratta di un modo di inviare i dati dal client al server e di un meccanismo per la spinta di dati del server al browser (quello che ti serve).

http://en.wikipedia.org/wiki/Reverse_Ajax

suona come potrebbe soddisfare le vostre esigenze, ho solo usato e ha funzionato molto bene.

quello di aver nascosto (o piccolo) iframe eseguire il javascript lungo corso copione e fare per controllare solo il contenuto del iframe? per esempio. script scrive ID per l'iframe sulla sua fine.

L'opzione 2 è esattamente quello che ho fatto prima. Utilizzare setTimeout di limitare il polling per ogni 30 secondi o giù di lì.

IL Quadro ICEfaces fornisce un Spinta AJAX tecnologia.Supportano Elaborazione scalabile delle richieste asincrone su vari server di applicazioni come Jetty, Tomcat e Glassfish.

Sebbene si tratti di tutta roba Java, potrebbe essere utile trovare i termini di ricerca giusti per Google.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top