Visualizzazione dei risultati da 1 a 6 su 6

Discussione: long_polling

  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44

    long_polling

    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.

  2. #2
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Visto che esegui chiamate asincrone di noma non dovrebbe bloccarsi il browser, se questo avviene il problema potrebbe essere lato server, io ottimizzerei le query oppure prova a documentati su angularJS (framework lato server)
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    mi sono dimenticato di mettere il codice lato server
    Si certo il problema è lì, infatti faccio questo:

    codice:
    $dato_attuale = $dato_calcolato_all'inizio = calcola dato()
    while ( $dato_attuale=$dato_calcolato_all'inizio ) {
      delay 1 secondo;
      calcola dato_attuale;
    
      if( dato_attuale != dato_calcolato_all'inizio ){
        stampa dato;
        break;
      }
    }
    insomma in quel loop ci rimane finchè non scatta il timeout. C'è modo di forzare l'uscita dal loop ad eventi che succedono lato client (non credo eh)? oppure semplicemente una soluzione piu' intelligente?

  4. #4
    Moderatore di Annunci siti web, Offro lavoro/collaborazione, Cerco lavoro L'avatar di cavicchiandrea
    Registrato dal
    Aug 2001
    Messaggi
    26,133
    Quote Originariamente inviata da feed90 Visualizza il messaggio
    ...
    C'è modo di forzare l'uscita dal loop ad eventi che succedono lato client (non credo eh)?
    No
    oppure semplicemente una soluzione piu' intelligente?
    vedi angularJS
    Cavicchi Andrea
    Problemi con javascript, jquery, ajax clicca qui

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2015
    Messaggi
    44
    Purtroppo non è il metodo che sto cercando; o comunque c'è troppo materiale.
    Si legge un po' ovunque che facebook adopera per fare questa cosa Comet, sembra decisamente simile al long polling, ma come diavolo fa a fare uscire il server dal loop quando arriva un'altra richiesta dal client

  6. #6
    Utente di HTML.it L'avatar di Marcolino's
    Registrato dal
    May 2003
    residenza
    Udine
    Messaggi
    3,606
    Vedi AngularJS e tre
    Lascia perdere FB è una zozzeria, d'accordo è il sito più visto al mondo ma non per questo è il migliore, anzi...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.