2010-09-15 7 views
6

So che ci sono tecnologie server Comet che lo fanno ma voglio scrivere qualcosa di semplice e cresciuto in casa.Trigger MySQL + notifica una connessione Apache/PHP a polling lungo

Quando un record viene inserito in una tabella MySQL, voglio che in qualche modo comunichi questi dati a una serie di connessioni Apache con polling lungo usando PHP (o qualsiasi altra cosa). Quindi più persone "ascoltano" attraverso il loro browser e il secondo MySQL INSERT accade, viene inviato al browser ed eseguito.

Il modo semplice è far sì che lo script PHP esegua il polling del database MySQL, ma questo non spinge realmente dal server e introduce un ordine inaccettabile di query di database non necessarie. Voglio ottenere quei dati da MySQL alla connessione a lungo polling essenzialmente senza interrogare gli ascoltatori.

Qualche idea su come implementarlo?

risposta

0

Questo è qualcosa che ho cercato anche per molti anni. Non ho trovato alcuna funzionalità in cui il server SQL invia un messaggio su INSERTS, DELETE e UPDATES.

TRIGGERS può eseguire SQL su questi eventi, ma qui non serve a nulla.

Immagino che tu debba costruire il tuo sistema. È possibile trasmettere facilmente un UDP da PHP (Example in first comment), il problema è che PHP è in esecuzione sul lato server ei client sono statici.

La mia ipotesi sarebbe che si potesse eseguire un applet Java in esecuzione sul client, ascoltando il messaggio UDP e quindi facendo scattare un aggiornamento della pagina.

Questo è stato solo alcuni pensieri nel momento in cui scriviamo ...

+0

Forse il grilletto potrebbe scrivere a qualcosa come memcached ed il PHP potrebbe sondaggio che? – phazei

+0

PHP è statico e non "in esecuzione" in background. Ci sono alcuni trucchi del libro su come farlo apparire come un "thread", ma poi arriva il prossimo problema, aggiornare la pagina dei client. Direi che il sondaggio deve essere fatto da AJAX. Potrebbe essere sufficiente interrogare per l'ultima data modificata (scritta dai trigger). Se è più recente, ricarica la pagina. –

2

ho cercato tutti i tipi di idee per una soluzione a questo come bene e l'unico modo per togliere il polling di query SQL è quello di eseguire il polling di un file. Se il riempimento è uguale a 0, continua il ciclo. Se il file è uguale a 1, il ciclo esegue query SQL e invia agli utenti. Aggiunge un altro livello di complessità, ma penso che significhi meno lavoro da parte di mysql, ma lo stesso per Apache o che altro daemon in esecuzione. Si potrebbe anche inviare il comando a uno stile "comet" daemon, ma andrà a biforcarsi su ogni richiesta e da quello che ho visto su come funzionano i socket, quindi spero che qualcuno possa trovare una soluzione a questo.

0

MySQL probabilmente non è lo strumento giusto per questo problema. Regilero ha suggerito di cambiare il tuo DB, ma una soluzione più semplice potrebbe essere quella di usare qualcosa come redis che ha una funzione pub/sub.

http://redis.io/topics/pubsub