Salve a tutti, sto implementando un sistema che stia in ascolto per eventuali messaggi o notifiche in ingresso. Ho deciso di adottare la tecnica del long polling. Il codice è una cosa di questo tipo:
Lato client: chiamo la funzione che controlla se arrivano messaggi o notifiche; se sono presenti il programma lato server si interrompe e li passa, se non sono presenti forzo comunque l'interruzione del loop lato server prima del timeout di ajax e faccio passare un messaggio di errore (in tal modo non viene mai superato il timeout di ajax e la funzione something_is_incoming è sempre in esecuzione).
codice:
$(document).ready(function(){
something_is_incoming();
});
function something_is_incoming(){
$.ajax({
url:'something_is_incoming',
type : 'POST',
dataType: "json",
async : true,
cache : false,
timeout:5000,
success : function(data) {
//funzione che legge il mio output
setTimeout(something_is_incoming, 500);
}
});
}
Lato server come ho già detto controllo se arrivano messaggi, se ci sono il loop va in break e li passa, se non ci sono il loop va in break prima che i 5 secondi del timeout di ajax siano trascorsi;
Il problema che non so come risolvere è che con un processo sempre in esecuzione, qualunque azione io faccia viene messa in coda. Ad esempio se voglio refreshare la pagina devo aspettare che il loop sia terminato, se voglio chiamare un altra chiamata ajax devo aspettare e via dicendo. insomma devo trovare un'azione che interrompa il ciclo. Mi piacerebbe evitare la funzione abort(); quello che cerco è un sistema che mi permetta di stoppare la chiamata ajax senza andare in errore.
Spero di essermi spiegato bene e grazie in anticipo per le risposte.