HTTP Long polling

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?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
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.
 

Vicar

Utente Attivo
15 Gen 2010
48
0
0
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?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
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:

Vicar

Utente Attivo
15 Gen 2010
48
0
0
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?
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
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
 

Vicar

Utente Attivo
15 Gen 2010
48
0
0
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 !
 

Nefyt

Utente Attivo
17 Apr 2012
1.102
0
0
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
Autore Titolo Forum Risposte Data
F firefox problema http Linux e Software 0
A errore http://datatables.net/tn/7 PHP 4
M HTTP Status 500 - Internal Server Error. Java 0
L Richieste HTTP get post PHP 1
M [PHP] Modi per fare redirect 301 da http a https PHP 12
B [Java] Paginazione in risposta HTTP Java 0
P Migrazione sito da http a https per rispettare linee guida google SEO e Posizionamento 12
giorgiolovecchio [WordPress] Risorsa http invalida sicurezza sito WordPress 2
Z HTTP ERROR 500 - La pagina non funziona - Joomla! Joomla 0
E [IIS] Reindirizzare richieste esterna http su https Web Server 0
MarcoGrazia Ricerca dell'esistenza del protocollo ( http | https ) in un url Javascript 2
W scambio banner sito per adulti http://massaggicinesi.tk/ Offerte e Richieste di scambio links 0
C Meta tag http-equiv="X-UA-Compatible" errore validatore w3c HTML e CSS 3
A conflitto http/https con google sites Javascript 1
Eruyomon http://studiosergipartners.it/ Presenta il tuo Sito 0
novello88 HTTP Basic Auth su Altervista PHP 0
E HTTP Error 403.14 - Forbidden The Web server is configured to not list the contents of this director Hosting 10
D Centralizzare Http da più server via ssh Linux e Software 1
Z Esercizio HTTP su SSL Apache 1
M Come verificare accesso ad area http auth basic? PHP 7
E http request - POST o PUT? PHP 1
M Verifica HTTP o HTTPS PHP 1
C [RISOLTO]Numeri random al termine di un link http Javascript 27
A HTTP Error 403.14 - Forbidden Hosting 4
B Scaricare file xml dopo autenticazione http PHP 1
D richieste http PHP 1
A Alternativa al <meta http-equiv="refresh" content="5;url=code.php" > HTML e CSS 5
L Tabella con rappresentazione corretta di tutti i campi e dei link HTTP . Ciclo for? PHP 5
M Volevo creare un servizio come http://www.destructingmessage.com/ PHP 2
D http://www.dedalo.byethost6.com/ Dedalo intelligenza condivisa Presenta il tuo Sito 0
M http://cryptoncomputer.altervista.org/webphp.php Presenta il tuo Sito 2
M Instantempo! http://instantempo.mattyfog.com Presenta il tuo Sito 0
C Professionista I.T. - Informatico free lance - http://www.malorgio.it Presenta il tuo Sito 0
D Problema DOPPIA richiesta HTTP Ajax 0
I 505 HTTP Version Not Supported PHP 5
T IIS attivo ma errore su http://localhost Classic ASP 1
catellostefano [URGENTISSIMO] si è verificato un errore in http server Apache 2
JellyBelly GET tramite file_get_contents a un url esterno http PHP 2
M Ajax http request refresh problem Ajax 0
N URGENTE "script src=http://www.bnradd.mobi/ngg.js" Database 0
S http://www.eventi-nightanday.com/ Presenta il tuo Sito 0
daviduccio IIS6 e PHP - Intestazioni HTTP - Web Server 5
G http://www.calcioealtro.netsons.org Presenta il tuo Sito 1
G http://wwe.nude.divas.forumcommunity.net/ Presenta il tuo Sito 0
virus.jack Http://virusjack.altervista.org Presenta il tuo Sito 0
V http://viviana.altervista.org Presenta il tuo Sito 3
M http://www.securitysite.helloweb.eu Presenta il tuo Sito 0
L http://www.securelook-mail.biz/ - Directory Free Presenta il tuo Sito 0
D nokia forum - il forum dedicato ai nokia e non solo: http://nokia.theforumx.net/ Presenta il tuo Sito 1
R HTTP Error 404 - File or directory not found. Classic ASP 1

Discussioni simili