bloccare php

Un saluto a tutti,

ho fatto qualche ricerca prima di decidere a postare, ma non ho trovato niente; se l'argomento è già stato trattato mi scuso in anticipo.

Premesso che con php sono al primo vagito, c'è un modo per bloccare una funzione?

Mi spiego: vorrei realizzare un applicazione che rinfreschi una lista solo quando ci sono nuove informazioni disponibili.

Lo script di presentazione già l'ho fatto e funziona, pesca i dati dal server mysql e li mette in bella mostra. Usa ajax per non rinfrescare tutta la pagina e non è venuto malaccio. Il mio problema è questo: mi scoccia avere il pulsante 'aggiorna' sulla pagina. Mi scoccia ancora di più, pollare ad un tempo più o meno stretto (tramite script lato client) per vedere se ci sono nuovi dati. C'è un modo tramite il quale invocare uno script php (che sarebbe richiamato tramite ajax senza patimenti da parte dell'utente) che possa in qualche modo "bloccare" per tornare solo ad una certa condizione (nella fattispecie, quando ci sono nuovi dati, ma il concetto si può anche astrarre).

So che uno script può fallire per 'timeout'. Questo esclude la prima prova che ho fatto:

- lo script php realizza la pagina accedendo al database e mettendo a video tutti i record

- uno script lato client parte dopo 5 sec dal caricamento e invoca tramite ajax uno script che verifica la presenza di nuovi record.

- se nuovi record sono presenti, lo script php restituisce i dati completando la richiesta ajax e lo script lato client aggiorna la pagina; prima di restituire il controllo, questo stesso script lato client richiama sè stesso ricorsivamente.

- lo scrip php, richiamato adesso la seconda volta, se ci sono nuovi record completa e tutto fila come prima, altrimenti non completa e, tramite sleep(), aspetta la disponibilità di nuovi record.

Quest'approccio (grezzo ma teoricamente corretto) funziona fintanto che ci sono nuovi records; quando si tratta di aspettare (e lo script php lato server, in effetti, aspetta) fallisce per 'timeout'.

Ora, assunto che non si possa bloccare l'esecuzione di uno script, esiste un altro modo per evitare di pollare con continue richieste lato client?

Grazie e saluti

inviato 9 anni fa
Umbrargento
X 0 X

Normalmente si usa il polling perché il server rimane più scarico (chiude le connessioni al DB, libera la memoria, libera il processore, ecc..) al costo di un esiguo traffico sulla rete.

Con lo sleep hai visto come mettere in pausa l'esecuzione dello script quindi il problema è il timeout che puoi eliminare sia dal php.ini (max_execution_time) sia da codice con set_time_limit(), anche se quest'ultima tecnica raramente è abilitata in hosting.

 :bye:

risposto 9 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda