2011-01-29 21 views
7

Mi è sempre piaciuta l'idea del polling lungo; sul mio server di sviluppo ho giocato con vari sistemi di notifica/nuovi post, ognuno con javascript per tenere una connessione e "aspettare" per una sorta di risposta. Ho sempre avuto un problema con molte implementazioni di questo, tutti prevedono il polling ripetuto del server mySQL per verificare la presenza di nuove righe.Polling lungo PHP, senza accesso eccessivo al database

Un server dedicato per lunghe richieste di polling è una possibilità, ma sembra molto dispendioso eseguire il polling continuo (circa 3 secondi in comune) un server di database per ogni client. È un enorme spreco di risorse per qualcosa che è relativamente insignificante.

C'è un modo di battere?

risposta

4

Se il tuo problema specifico è che stai cercando di evitare di notificare gli eventi attraverso un database, dovresti probabilmente considerare l'uso di memoria condivisa o semafori.

Invece di eseguire il polling continuo del database, è necessario monitorare la memoria condivisa. Quando qualcosa scrive sul db (sto assumendo una sorta di coda di messaggi), puoi contrassegnare l'evento tramite la memoria condivisa. Il codice di ascolto lo avrebbe rilevato e solo allora stabilirà una connessione db per recuperare il messaggio. In alternativa, è possibile utilizzare la memoria condivisa per sostituire completamente l'uso del database.

Il riferimento per il semaforo php e le funzioni di memoria condivisa è qui - http://uk.php.net/manual/en/ref.sem.php

0

WebSockets

...

Quando in realtà è completamente supportato;)

+0

Non è molto il polling del server, ma piuttosto l'archiviazione e il recupero dei dati sul lato server. – Harold

+0

Quindi mi piacerebbe sicuramente andare con il suggerimento di seppo0010. Indovina è quello che ottengo solo per dare un'occhiata alla domanda;) –

+0

Grazie comunque per il supporto! – Harold

5

vorrei usare un po 'di NoSQL per notificare ci sono nuovi dati. Redis ha pub/sub e un blocking list.

È inoltre possibile utilizzare, ad esempio, memcache e creare una nuova chiave quando i dati sono disponibili.

+0

Questa è davvero un'idea eccellente. Mi ero completamente dimenticato di memcache, dal momento che non molte delle applicazioni sviluppate ne trarrebbero beneficio. Leggere le variabili dal memcache sarebbe sicuramente più veloce, grazie per quello! – Harold

+0

Forniresti un esempio? Non l'ho mai usato Grazie. – moderns

0

cache di dati, mi piace l'uno da Zend Server, è drasticamente ridotto tirando dal database

-1

Può guardare in avere un filmato Flash in sottofondo che mantiene un collegamento continuo con il server utilizzando i socket. Java supporta anche i socket quindi può anche essere un'applet java incorporata nella tua pagina.

+0

Questo non ha nulla a che fare con quello che ho chiesto. – Harold

0

Ogni volta che si inserire o aggiornare il database creare una cache per quel campo del database. Puoi utilizzare qualsiasi semplice cache basata su PHP (http://hycus.com/2011/03/31/hcache-a-cache-system-for-php/).

Quindi è possibile eseguire il polling di tale cache in modo continuo utilizzando JQUERY.