Ottimizzazione delle notifiche istantanee

0

Scenario

Per inviare notifiche istantanee al client, sto inviando una richiesta AJAX a una pagina PHP che controlla se ci sono nuove notifiche: se ce ne sono, le emette, altrimenti si addormenta per 10 secondi prima di riprovare, quindi ha una struttura di base simile alla seguente.

<?php
$max_attempts = 10000;
for($i=0;$i<=$max_attempts;$i++){
    check_new_notifications(); //checking notifications in an sql database
    if(new_notification){
      echo $notification;
      break;
    }
    else{
      sleep(10);
    }
}
?>

Cosa manca

Anche se questo è ottimo per il client, poiché non deve inviare una richiesta ogni 10 secondi, ma solo uno, non riesco a trovare un modo migliore per il server che controllare ogni 10 secondi se ci sono nuovi notifiche.

La mia domanda

Quale soluzione posso adottare per evitare che il server controlli costantemente le nuove notifiche?

    
posta Stubborn 29.07.2015 - 19:37
fonte

1 risposta

1

Puoi:

Utilizza il polling

Tuttavia, pensa di inviare una richiesta ogni 10 secondi.
Utilizzando l'approccio suggerito, si mantiene una lunga connessione al server, che a sua volta mantiene un processo / thread occupato. Se questo è usato solo da te, va bene. Se è destinato a essere utilizzato da molti utenti, è un enorme spreco di risorse, dal momento che il server sarà occupato a non fare nulla al 99% delle volte.

Usa Websockets

Questa è la cosa che ti serve.
I Websocket forniscono una comunicazione TCP diretta e continua tra il browser e il server. Dai un'occhiata a Ratchet , questa è un'ottima libreria PHP per Websocket sul lato server.

Utilizza un servizio esterno

Ci sono servizi come Pusher che utilizzano anche websocket. Tuttavia, non hai bisogno di un server socket, ma invia loro un evento dal tuo back-end. Quindi il loro servizio invia nuovi dati al tuo browser.

    
risposta data 30.07.2015 - 23:47
fonte

Leggi altre domande sui tag