2010-05-11 9 views

risposta

1

È necessario eseguire il polling continuo di una pagina che ha il valore dal database.

+0

Non necessariamente. Ci sono tecniche push disponibili. –

+1

@RobertHarvey Come? puoi darlo? –

2

Aggancia una stored procedure speciale nel database che avvisa l'applicazione dopo una modifica. Avrai bisogno di un modulo personalizzato e delle istruzioni di attivazione corrette.

L'altra opzione sta eseguendo il polling.

+0

Come avviserà l'applicazione, che si trova sul browser del cliente? –

+0

L'applicazione è divisa in due parti: sul browser e sul server web. Il servizio Web di back-end è responsabile della comunicazione con il database, a meno che il richiedente non stia utilizzando lo stile .0000001% di fare in modo che il browser comunichi SQL a un database. –

+0

+1 per un modo per impedire il "polling del database", anche se non impedisce il "polling client-server" –

5

Il server (database/web) non può avviare una connessione - solo il client può. Quindi dovrai eseguire il polling del database fino a quando non ci sarà un aggiornamento. È possibile creare un servizio Web che controlla il database e che utilizza jQuery.

Modifica: Sono corretto. È possibile mantenere aperta una connessione AJAX finché il server non "invia" dati ad essa. Vedi: http://en.wikipedia.org/wiki/Reverse_Ajax

E a quanto pare è in realtà il polling: http://en.wikipedia.org/wiki/Push_technology#Long_polling. Se il server non ha ancora alcun dato da inviare, mantiene aperta la connessione fino a quando non lo fa. Non è una tecnologia push "pura", perché il client non ha una porta di ascolto a cui il server si connette. L'effetto è simile, comunque.

Modifica 2: Quindi torna a rispondere alla tua domanda ... Dovrai scegliere come "interrogare" il servizio web. Il servizio Web dovrebbe quindi controllare il database per vedere se ci sono stati aggiornamenti. Il controllo del database per gli aggiornamenti potrebbe essere il più complicato e dipende in realtà dalle tue esigenze. Puoi eseguire una query SQL per vedere se qualcosa è cambiato, ma come lo sapresti? Avresti bisogno di una sorta di parametro (tipicamente una data) da confrontare. Se fatto male, potresti perdere alcuni aggiornamenti o avere più hit per un aggiornamento. Quello che ha detto l'Autocrazia sarebbe un buon modo per ricevere notifiche degli aggiornamenti. È possibile mantenere l'elenco nel database, nella memoria, ecc. E cancellarlo quando il client riceve gli aggiornamenti.

0

Fondamentalmente è necessario eseguire il polling continuo del server per le modifiche al DB. Il server non può effettuare una chiamata al client, quindi il client dovrà semplicemente chiedere al server se ci sono state modifiche.

+0

Vedere http://en.wikipedia.org/wiki/Reverse_Ajax –

1

Suggerirei di creare una pagina HTML che utilizza setIntreval() per effettuare ripetutamente chiamate AJAX a uno script PHP che interroga il database. Potresti usare JSON e PEAR per rendere l'operazione un po 'più semplice.

Link di riferimento:

+0

. Molte grazie. Il tuo metodo funziona perfettamente! Semplicemente non è possibile impostare un intervallo troppo basso o ci sono problemi con i lettori di dati di apertura/chiusura. –

11

Quello che stai descrivendo è colloquialmente chiamato programmazione Comet. Comet descrive un gruppo di tecniche per spingere il contenuto in una pagina Web con una connessione HTTP persistente.

La spinta verrebbe avviata utilizzando una combinazione di procedura trigger/memorizzata nel server di database. In questo modo, si verifica indipendentemente da dove proviene l'aggiornamento dei dati.

+1

Hai capito. Wikipedia (http://en.wikipedia.org/wiki/Comet_%28programming%29): Comet ... è conosciuto con diversi altri nomi, tra cui Ajax Push, Reverse Ajax, Two-way-web, HTTP Streaming e HTTP server spingere tra gli altri. –

+0

Sembra molto carino. Dovrò esaminarlo. Grazie per il consiglio! –

+2

per esempio http://www.ape-project.org/ – choise

3

sto facendo quasi stessa cosa con una chat, ricarica uno script php ogni xx sec.

appare come questa sostituire j con $ se non si utilizza jquery.noconflict ..

j(".chatref").everyTime(3000,function(i){ 
    j.ajax({ 
     url: "chatx.php", 
     cache: false, 
     success: function(updated){ 
      j(".chatref").html(updated); 
      ...do stuff.. 
     } 
    }); 

Questo è un metodo molto bello penso :) se si desidera inviare a Vars chatx.php basta aggiungere ? php & x = 1 & y = 2?>

Problemi correlati