Applicazioni realtime azioni da eseguire ogni secondo
#1
Posted 13 January 2012 - 08:11 AM
#2
Posted 13 January 2012 - 08:38 AM
$oraesecuzione = date("Y-m-d H:i:s", mktime() + 44);A questo punto, ad ogni richiesta della pagina, controllerei tutti i record di quella tabella. In base al tempo, saprei quali e quanto saranno da eseguire.
L'algoritmo funziona. Lo sto già provando. Però mi sembra poco performante. I mean: se siamo connessi in 1000 su un sito, ogni volta che uno fa una richiesta ... controlla sta tabella ed esegue quello che deve eseguire. Ha senso?
#3
Posted 13 January 2012 - 09:02 AM
Devi creare un controller dedicato e nascosto a tutti gli altri 1000 utenti (magari protetta da ip, che la possa eseguire solo 127.0.0.1)
e poi scheduli l'esecuzione di questa pagina mediante crontab (però secondo me ogni secondo è un esagerazione. Puoi fare ogni 15 min)
Non preoccuparti, è dentro il monitor!Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
#4
Posted 13 January 2012 - 10:24 AM
#5
Posted 13 January 2012 - 10:29 AM
Non preoccuparti, è dentro il monitor!Sapevi che cercando su google yii + "la funzione su cui stai impazzendo", trovi quasi sempre dei buoni indizi in italiano, per risolvere i tuoi problemi, senza perdere tempo a postare?
#6
Posted 14 January 2012 - 02:54 PM
In pratica il più delle volte non accade nulla. Ho una pagina che si aggiorna ogni 5 secondi ... (ogni 5 secondi fa una richiesta json che aggiorna la pagina). In quelle richieste può sempre accadere qualche cosa.
Il problema viene quando ci son più utenti che interagisco sul db. Così ho usato le transazioni.
$connection = Yii::app()->db;
$transaction = $connection->beginTransaction();
try {
$lavori = $connection->createCommand($sql1)->queryAll();
$connection->createCommand($sql2)->execute();
$lavori = $connection->createCommand($sql3)->execute();
$transaction->commit();
} catch (Exception $e) {
$transaction->rollBack();
}
#8
Posted 14 January 2012 - 04:11 PM
#9
Posted 14 January 2012 - 04:51 PM
#10
Posted 16 January 2012 - 04:33 AM
sensorario, on 14 January 2012 - 04:51 PM, said:
Mi sembra di ricordare che l'oggetto cache di Yii ti permette di condividere informazioni a livello applicazione in modo che sia accessibile a tutte le istanze php.
Poi se la cache la memorizzi su database è anche scalabile tra più server se sincronizzi mysql.
Sulla schedulazione ogni secondo puoi fare uno script php che si avvia una tantum all'avvio del server e fa ciclo infinito ogni secondo mettendo alla fine di ogni ciclo una pausa php (usleep) oppure invece di usare crontab ti fai uno script che avvii come demone allo startup che fa sempre ciclo infinito e richiama ogni secondo lo script php (il ciclo stavolta è nell'SH invece che nel php).
if(Yii::app()->user->username=='proid') echo "Hello me!"; else echo "Proid";
#11
Posted 16 January 2012 - 07:34 AM
#12
Posted 02 January 2013 - 09:19 AM
Io ho la necessità di farmi un demone in php che legga una tabella 'queue', se non è vuota deve fare una serie di elaborazione, altrimenti 'rimanere in attesa'.
Come si realizza ?
Tenete conto che il servizio deve essere fault tolerant. Se lo script dovesse andare in crash devo trovare il modo di farlo 'risorgere'
Ricordalo quando fai il debug
#13
Posted 02 January 2013 - 11:48 AM
#14
Posted 02 January 2013 - 01:42 PM
vorrei che facesse una cosa del tipo
while(1) { ... alcune cose sulla coda, da pochi ms }
poi mi sono detto.. come faccio se va giu ?
allora... potrei fare si che lo script ogni minuto, quando viene lanciato, controlla se 'se stesso' è già in esecuzione.. ma come si fa?
dal db deve solo leggere e cancellare, quindi se va in crash, a livello di db non succede proprio nulla, da quel punto di vista l'app è molto robusta.
Ricordalo quando fai il debug
#15
Posted 08 January 2013 - 05:22 AM
#16
Posted 08 January 2013 - 06:43 AM
#17
Posted 09 January 2013 - 02:41 AM
quello che chiedevo è una info tecnica su come rendere un yiic command molto simile ad un demone
Ricordalo quando fai il debug
#18
Posted 09 January 2013 - 03:20 AM
#19
Posted 09 January 2013 - 03:49 AM
Anche se, secondo me, un demone deve essere scritto per benino e in un linguaggio più di basso livello.
Aggiungo un piccolo tutorial che ho trovato che pare interessante!

Help
















