per zeit eine action starten |
subjective
Forenheld
Beiträge: 844 |
Unsauber - funktioniert auch nicht unter allen Bedinungen. Wenn es zB ein Rundenbasiertes Spiel ist hast du eventuell gleich zwei Probleme.
1. Rechenaufwand. - der Abschluß der Runde erfordert meist eine Menge Aktionen.
2. Benachrichtigung der User - wenn du zB E-Mails über den Ausgang des "Kampfes" versenden willst, muss dies direkt nach der angesetzten Zeit passieren.
Ein Cronjob löst diese beiden Probleme, da der Aufruf seperat von den eigentlichen Seitenaufrufen der Besucher ist.
Was mir an deiner Lösung gar nicht zusagt ist das serialisierte Array für alle Cronjobs. Das (de)serialisieren von Daten ist Zeitaufwändig. Daher sollte es so selten wie möglich und/oder mit so wenig Daten wie möglich erfolgen.
Auch ein echter Cronjob sollte nur ein Script anstoßen, in welchem die notwendigen Aufgaben notiert sind (Ein solches Script kann eventuell auch vom Seitenaufruf ausgelöst werden). Diese sollten jedoch in einer echten DB-Struktur liegen (ID - ZEIT - DATA). DATA könnte das von dir angesprochene serialisierte Array sein, da die Daten je nach Aufgabe verschieden sind. Durch die Speicherung der einzelnen Aufgaben und der Zeit läßt sich jedoch sehr einfach und schnell prüfen ob Aufgaben anliegen, welche zum aktuellen Zeitpunkt ausgeführt werden müssen (SELECT COUNT(*) FROM aufgaben WHERE zeit < jetzt).
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
yogi
Otto-Normal-Poster
Beiträge: 66 |
Schlicht und einfach zu aufwendig.
Was spricht gegen einen Cronjob, der weit weniger Probleme verursacht, wie subjective schon angesprochen hat?
---
mfg
yogi
|
 Profil
Editieren
Zitieren
|
m[e]ntor
Pixelschubser
Beiträge: 2 |
Was dagegen sprich, wäre eigentlich nur, dass man nicht die Möglichkeit hat, selber cronjobs einzurichten. Deswegen wollte ich einfach nur eine andere möglichkeit aufzeigen, die ich selber einsetzen.
Gut, das ganze nicht für ein brwosergame, aber solange hier nicht mehr infos kommen, was eigentlich gemacht werden soll, kann man ja auch über andere möglichkeiten diskutieren.
Und so gross ist die datenmenge die (de)serialisiert nun auch nicht:
INSERT INTO `cache_table` VALUES ('cron_updates', 'a:1:{i:0;a:2:{s:8:"cron_key";s:19:"session_cron_delete";s:11:"cron_update";s:10:"1120175708";}}', 1);
ich rufe z.b. bei mir mit einer datenbankabfrage folgendes ab:
Benutzergruppen,Einstellungen,Cronjobs theoretisch noch mehr gecachte Daten.
Warum ich das so mache: optimierung und einsparung von Datenbankabfragen.
---
http://www.amp-lified.de
|
 Profil
Website
Editieren
Zitieren
|
yogi
Otto-Normal-Poster
Beiträge: 66 |
Cronjobs nicht selber einrichten?
Also mein Kollege machts selbst auf einem stinknormalem Webserver.
Natürlich muss der Zugriff via SSH erlaubt sein. Aber wenn man schonmal sowas aufwendiges programmiert, dass man Cronjobs braucht, kann man sich auch ruhig einen geeigneten Server suchen.
---
mfg
yogi
|
 Profil
Editieren
Zitieren
|
Thodi
Fachidiot Threadstarter
Beiträge: 101 |
wenn ich ein cronjob mache was muß ich denn als if bedinung setzen weil ohne if startet er ja nach aufruf der seite
|
 Profil
E-Mail
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Verglichen mit einer einzelnen Zahl ist die Datenmenge sehr groß. Wenn man nun überlegt das dies bei jedem Seitenauf passieren soll, ist es einfach unnötig. Man speichert die Zeit seperat und fertig. Dann übernimmt der DB-Server die ganze Arbeit direkt. Keine Deserialisierung und keine Schleife mehr nötig.
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
Thodi
Fachidiot Threadstarter
Beiträge: 101 |
Danke für deine Antwort !
Wie kann ich das am besten machen?
|
 Profil
E-Mail
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Habe ich doch schon ausführlich beschrieben?
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
Thodi
Fachidiot Threadstarter
Beiträge: 101 |
Îch wollte fragen ob ich das dann per cronjob machen kann ?
|
 Profil
E-Mail
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Es ist beides möglich - Cronjob wäre die bessere Lösung da die Last dann nicht im Request eines Besuchers anfällt. Zur Not geht auch die Ansprache per Seitenrequest - es wäre jedoch die deutlich weniger schöne Lösung.
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
Thodi
Fachidiot Threadstarter
Beiträge: 101 |
Danke aber eins geht nicht,der cronjob startet aber führt das hier net aus.
session_start();
$verbindung = mysql_connect("datenbank","U","PW");
mysql_select_db("DB");
$member2 = mysql_query("SELECT * FROM login WHERE username = '$username' ");
$member = mysql_fetch_array($member2);
$wtime2 = $_REQUEST["wtime2"];
$bereit = $member[bereit] + 1;
$Los = "UPDATE login SET bereit = '$bereit' WHERE username LIKE '$username' LIMIT 1";
$los2 = mysql_query($Los);
?>
Das ist komisch.wenn ich die seite so aufrufe geht das
|
 Profil
E-Mail
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Höchstwahrscheinlich ist $_REQUEST nicht gefüllt.
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
Korp
Otto-Normal-Poster
Beiträge: 57 |
subjective schrieb am 04.07.2005 15:26
Höchstwahrscheinlich ist $_REQUEST nicht gefüllt. |
wenn nen cronjob mit sessions arbeiten würde^^
ich udn thodi habn nun eine andere lösung gefunden...
---
Interessen am PC:
html, web design, sql und php
|
 Profil
E-Mail
Website
Editieren
Zitieren
|
subjective
Forenheld
Beiträge: 844 |
Da ist unlogisch - ein Cronjob soll ja unabhängig vom Benutzer laufen. Also hat er weder eine Session, noch Benutzereingaben vom Browser.
Wenn ihr solche Daten nutzt, solltet ihr konzeptionell noch mal etwas nachgrübeln.
---
Weaverslave
|
 Profil
Website
Editieren
Zitieren
|
Thodi
Fachidiot Threadstarter
Beiträge: 101 |
echt super forum klasse bekommt man gute hilfe lach
|
 Profil
E-Mail
Editieren
Zitieren
|