HTTP Long polling

  • Creatore Discussione Creatore Discussione Vicar
  • Data di inizio Data di inizio

Vicar

Utente Attivo
15 Gen 2010
48
0
0
Salve ragazzi,
sto progettando un sito web e per questo motivo non ho ancora iniziato a scrivere codice.

IL PROBLEMA IN SINTESI E' QUESTO:
Se ho due utenti connessi ad una pagina che devono scambiarsi messaggi senza alcun refresh, come faccio?

Inizialmente ho pensato subito di fare una chiamata ajax ogni 0,2secondi che mi restituiva eventuali nuovi messaggi ma questa soluzione è assolutamente controproducente.

Ho letto un pò in internet ma non ho trovato una soluzione efficace

COME RISOLVEREI:
Farei una chiamata AJAX(con un timeout) e nel codice php farei un for infinito finchè non esistono nuovi messaggi.

CODIFICA:

PHP:
while(!newMessage){ 
     usleep(1000);//microseconds 
} 

echo getMEssage();


HTML:
$.ajax({
      type: "GET",
      url: "polling.php",
      async: true,
      cache: false,
      timeout:50000,
      success: function(data){ 
          //Nuovo messaggio
      },
      error: function(){
          //Timeout finito
      }
});

Potrebbe essere una soluzione?
Ho letto in internet e si parla poco di questo HTTP Long polling e non riesco a trovare una soluzione. voi mi potete aiutare?
 
Inizialmente ho pensato subito di fare una chiamata ajax ogni 0,2secondi che mi restituiva eventuali nuovi messaggi ma questa soluzione è assolutamente controproducente.
Why? Per un sistema di messaggistica privata è la soluzione migliore e per le prestazioni ti basta caricare di volta in volta l'ultimo messaggio invece dell'intera pagina aggiungendolo agli altri.
 
Why? Per un sistema di messaggistica privata è la soluzione migliore e per le prestazioni ti basta caricare di volta in volta l'ultimo messaggio invece dell'intera pagina aggiungendolo agli altri.

Si, il problema è che io ho semplificato l'esempio. Pensando che ci saranno anche 500 persone collegate nello stesso momento, fare una richiesta ogni 0,2secondi non mi sembra molto efficace, no?
 
Si, il problema è che io ho semplificato l'esempio. Pensando che ci saranno anche 500 persone collegate nello stesso momento, fare una richiesta ogni 0,2secondi non mi sembra molto efficace, no?
Dipende dall'utenza e dalle capacità del server, comunque anche il long polling mette a dura prova il server perché deve gestire moltissime connessioni contemporaneamente invece di singole richieste alternate, però è anche vero che con questo metodo il server non deve rinegoziare la connessione ogni pochi secondi. Esistono anche altri metodi come i websockets o gli iframe invisibili, vedi te.


ps: il classico richiamo a intervallo è comunque il migliore in caso di utenza moderata o di piccole/medie chat
 
Ultima modifica:
Per esempio, questo sito come fa a gestire tutte le richieste?
http://www.alternativeoutput.it/brisk

Sono tantissime!

Ho notato che quando apri una partita rimane aperta una chiamata ajax per 4minuti e poi riparte ancora per 4 minuti e così via. Credo sia quella che permette lo scambio di messaggi tra i vari giocatori, no?

Confermi?
 
Per esempio, questo sito come fa a gestire tutte le richieste?
http://www.alternativeoutput.it/brisk

Sono tantissime!

Ho notato che quando apri una partita rimane aperta una chiamata ajax per 4minuti e poi riparte ancora per 4 minuti e così via. Credo sia quella che permette lo scambio di messaggi tra i vari giocatori, no?

Confermi?
Tramite fiddler (della console di chrome fidarsi è bene ma non fidarsi è meglio) ho visto che fa una richiesta http tramite ajax ogni 5-6 secondi spendendo dei dati via get, almeno alla index.

1z4er8z.png
 
Si ma se guardi durante la partita c'è un canale che rimane sempre aperto come se fosse un pool dove tutti gli utenti ascoltano se cisono news !

Giusto?

Grazie per l interessamento !
 
Si ma se guardi durante la partita c'è un canale che rimane sempre aperto come se fosse un pool dove tutti gli utenti ascoltano se cisono news !

Giusto?

Grazie per l interessamento !

Non ho fatto molti controlli, puo darsi che utilizzi il long polling da altre parti, ma comunque quelle sono richieste http dove ogni volta il server deve rinegoziare la connessione e restituire i dati, in pratica è la classica richiesta in ajax ad intervallo regolare.
 
Ultima modifica:

Discussioni simili