11/04/2013 19:01:55 e modificato da yamada il 11/04/2013 19:17:55
Sicuramente giusta l'idea di far refreshare all'utente la propria presenza con time().
Sicuramente sbagliato far cancellare agli utenti attivi gli utenti inattivi. Non è vero che la query è ogni 10 minuti (questa è solo la teoria). In realtà è ogni 10 minuti se l'utente non preme mai AGGIORNA. Se lo facesse molto probabilmente (quasi sicuro diciamo siccome lo fanno quasi tutte le land) l'utente ricaricherà il ciclo di controllo dall'inizio e quindi rifarà il controllo iniziale per poi aspettare 10 minuti.... sempre se non fai aggiorna ovviamente!
Cosa peggiore è il fatto che se hai 100 utenti connessi ognuno di loro controlla che gli altri 99 non siano outoftime ed eventualmente li cancella: sicuramente un sistema non ottimizzato di gestione delle risorse... inoltre supponendo che i 100 utenti avessero il ciclo ogni 600 secondi (10 minuti) per assurdo (quasi impossibile) in maniera uniformemente distrubuita avresti una query di controllo ogni 6 secondi (600 / 100 utenti). Direi che è alquanto stupido. Basta un singolo controllo ogni 10 minuti. Un refresh così frequente non ha senso.
ultima cosa il sistema fallisce totalmente nel caso nessuno rimanga connesso attivamente: siccome ogni utente ATTIVO controlla gli inattivi cosa succede se TUTTI gli attivi escono premendo "X" (pochi fanno realmente il logout)?? succede che risulteranno ONLINE anche dopo ORE finche un nuovo utente si connetterà e diventando ATTIVO andrà a cancellare gli utenti inattivi.
sicuramente il sistema funziona a livello pratico ma di certo non è così che si programma.
11/04/2013 19:19:31
11/04/2013 19:32:42 e modificato da yamada il 11/04/2013 19:40:39
11/04/2013 19:36:51 e modificato da darkabe il 11/04/2013 19:38:04
11/04/2013 19:46:08
11/04/2013 21:27:33 e modificato da ilgrandeinverno il 11/04/2013 21:43:29
Assolutamente d'accordo con yamada per quanto riguarda l'ottimizzazione delle query di controllo.
Tengo a specificare che non sono entrato in dettaglio per quanto riguarda la modalità di esecuzione della query che cancella gli offline per un unico motivo: non tutti gli hosting offrono i conjobs. Aruba, tanto per dirne uno, di base non li offre nel suo pacchetto hosting.
Di conseguenza il problema per chi non ha a disposizione i cronjobs va affrontato diversamente, specie nel caso in cui non si abbiano a disposizione (o non si vogliano utilizzare) servizi esterni che lancino script di controllo/manutenzione a intervalli così frequenti.
Resta inteso che questo discorso vale per TUTTE le query eseguite ad ogni refresh regolare: se lo stesso frame (ipotizzando che sia un frame) che fa il refresh automatico ogni X minuti esegue, per ogni utente collegato, altre query, con 100 utenti collegati e refresh ogni 10 minuti avrai sempre 600 query ora = 14400 query al giorno (teoriche ipotizzando 100 connessi fissi per 24 ore su 24).
Generalmente gli autorefresh vengono usati non solo per tenere viva la sessione e aggiornare i presenti ma anche per altre funzionalità, dal controllo della posta, all'aggiornamento di parametri di pg ed oggetti, all'innesco/controllo di funzioni di interesse generale come meteo ecc.
Il che significa che 14400 va moltiplicato per il numero di operazioni che il frame autorefreshante esegue. Diciamo che ne fa 5 (controllo "non ottimizzato" dei presenti compreso). Sono 3000 query/h anzichè 600 = 72000 query / giorno. E la rimozione della query di controllo sugli online si rivela sostanzialmente ininfluente sul consumo generale di risorse.
Soprattutto considerando che il 99% delle land attive é ben lungi dall'avere anche solo la metà dei 100 utenti online ipotizzati e tantopiù é ben lungi dall'averli per 24 ore su 24.
E consideriamo anche che in genere i tempi di refresh sono anche più frequenti, perchè il giocatore medio tende a lamentarsi con foga se l'avviso che c'è una nuova missiva non gli arriva subito.
Quindi, posto che il tuo discorso é assolutamente corretto in termini teorici e in termini di BUONE ABITUDINI pratiche da assumere nel programmare e soprattutto nel gestire la manutenzione del proprio database senza rischiare picchi di consumo delle risorse, vale la pena di ricordare che sulla land media l'impatto di una singola query (di questo tipo) in più o in meno é sostanzialmente ininfluente e che di sicuro la land non andrà mai in crash per questo.
PS: per chi non può / non vuole avvalersi di servizi esterni in grado di simulare un cronjob e sta su un provider che non offre i cronjob, vanno studiati modi alternativi per ridurre i consumi di risorse. I frame autoaggiornanti degli utenti sono un ottimo checker, ma eventualmente puoi far innestare il check da qualunque operazione che l'utente esegue (statisticamente) con una frequenza utile ai tuoi scopi.
Es: non avendo cronjobs a disposizione potresti eseguire la query di controllo se e solo se l'orario rispetta determinati requisiti (es. se il numero di minuti dell'ora corrente é multiplo di 10). Non elimini il problema del picco, perchè al verificarsi della condizione scelta, TUTTI gli utenti che refreshano nelle stesse condizioni invieranno la query di controllo, ma almeno ti risparmi di inviarle di continuo.
Però occhio: il picco di consumo di risorse a seconda delle condizioni che stabilisci, potresti essere proprio tu a crearlo nell'ansia di ridurre il numero di query che, "spalmate", invece non avrebbero impatti percepibili.
Io più che fare una valutazione teorica a tavolino, se non hai i cronjob a disposizione, farei una valutazione statistica pragmatica sulla base della tua utenza media per scegliere la soluzione migliore.
11/04/2013 23:34:37 e modificato da salvuzzo87 il 11/04/2013 23:52:14
Ah, ottima idea quello del cronjob php... se non sbaglio sarebbe il --q vero?? Si meno sprego di risorse senza dubbio :) Grazie mille per le informazioni :D per altri problemi (visto che ne sapete molto ma molto più di me essendo un novizio di PHP non esiterò a scrivere) :)
Hmm però leggendo su internet non tutti i domini supportano i cron-job. Che voi sappiate altervista è uno di questi?
12/04/2013 12:45:01
Non uso spesso altervista, ma da quanto mi è sembrato di vedere i cronjob ci sono.. ma non gratis.
Li trovi sotto la voce "Tools", ma credo proprio tu debba comprare il numero di esecuzioni (quindi se ne hai 1 che parte solo a mezzanotte, dovrebbero esser 365 esecuzioni annue).
Se l'ho inteso bene è altamente sconveniente averne uno che parte ogni ora, figuriamoci ogni 10 minuti..
Qualcuno che usa Altervista più di me mi smentisca se ho detto qualche fesseria :-P
12/04/2013 15:08:58
I cron job su altervista si pagano ad esecuzione:
100 ESECUZIONI 0.20 euro
500 ESECUZIONI 1 euro
1000 ESECUZIONI 2 euro
10000 ESECUZIONI 10 euro
12/04/2013 17:18:27
Per chi non avesse problemi ad affidarsi a un servizio esterno:
SETCRONJOB.COM https://www.setcronjob.com/
La versione gratuita (che bisogna ricordarsi di rinnovare ogni mese) assegna 50 punti "spendibili" in uno o più cronjob. I cronjob giornalieri (run period = 24 h) valgono 1 punto ciascuno. Quelli orari (run period = 60 minutes) valgono 24 punti.
Per cronjob ogni 10 minuti si consumano 144 punti, quindi é necessario passare come minimo al piano a pagamento da 10$ annui.
Discussione seguita da
Rispondi alla Discussione Aggiungi ai Preferiti Inoltra Discussione Forum Programmazione, GDRCD, Open Source, Hosting Elenco Forum
Epic Wizardry RP: Changelog N. 4 - Epic Wizardry Rp
drongo ha recensito Il Grande Blu
Hero Wars → Costruisci la tua squadra di eroi leggendari e domina il campo di battaglia! Strategia, tattica e potenza si scontrano in questo RPG ricco di azione!
Pirates of the Caribbean: Tides of War: Quarti di finale del torneo
DarkOrbit: Galactic Strife & Buono gratis 💥
I dati del generatore di rank sono stati aggiornati!
Legacy of Magic: Il vecchio e la mappa
World of Warship → MMO gratuito con frenetiche battaglie navali ambientate nel ventesimo secolo. Salpa con la tua nave ed affronta i nemici!
outrunstaff ha risposto alla discussione: Project OutRun PbC
meleys ha aperto un annuncio di ricerca: Westeros GDR ricerca Tester
Lineage II: Black Friday di Lineage II
CRSED: F.O.A.D. → Brutale sparatutto MMO in cui vince l'ultimo giocatore che resta in vita nell'arena! Ogni giocatore sarà accompagnato da armi realistiche e magie!
Il gestore di Ultima Espiazione Gdr ha risposto alla recensione di mancoicani
zannata ha recensito Sigil - La Città dei Portali
Sea of Conquest: Tuffati nel mistero! 🌊
Pirates of the Caribbean: Tides of War: Evento di Ringraziamento!
NosTale → Con l’aiuto della spada e della bacchetta magica risolverai abilmente intricate missioni e domerai coraggiosamente mostri selvaggi!
Morti Assurde - 50 modi assurdi di morire in un Gioco di Ruolo. Raccontaci le tue morti assurde!
Mud - Giochi di ruolo online su client telnet..scopri i Mud e la loro storia!
The Darkside of Miami - Intervista al gestore di The Darkside of Miami: play by chat urban fantasy!
Ricerche Giochi di Ruolo - Come se la passano i giochi di ruolo secondo Google? Scopriamolo su Google Trend!
Dalemyr - Intervista al gestore di Dalemyr.. il play by chat ambientato nei Forgottem Realms di Dungeons and Dragons!
DragonStorm Mud - DragonStorm Mud chiude: intervista ai fondatori che ci spiegano le motivazioni