Home | Registrieren | Einloggen | Suchen | Aktuelles


Forum » PHP & MySQL » per zeit eine action starten Antworten
per zeit eine action starten

subjective
Forenheld


Beiträge: 848


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


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: 848


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


Beiträge: 101


Danke für deine Antwort !

Wie kann ich das am besten machen?


  Profil   E-Mail   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


Habe ich doch schon ausführlich beschrieben?

---
Weaverslave

  Profil   Website   Editieren   Zitieren

Thodi
Fachidiot


Beiträge: 101


Îch wollte fragen ob ich das dann per cronjob machen kann ?

  Profil   E-Mail   Editieren   Zitieren

subjective
Forenheld


Beiträge: 848


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


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: 848


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: 848


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


Beiträge: 101


echt super forum klasse bekommt man gute hilfe lach

  Profil   E-Mail   Editieren   Zitieren
Seite 1 | 2 | 3 | 4  

Antworten
Nach oben