anpera.net

anpera.net

experimental server @home
Aktuelle Zeit: Do 12 Jun, 2025 15:48

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste
Autor Nachricht
 Betreff des Beitrags: Wer-war-da-Anzeige
BeitragVerfasst: Sa 08 Dez, 2007 12:08 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Hallo!

Ich würde euch gerne das im Titel beschriebene Mod hier präsentieren doch leider war mein Kampf mit der date-function und einige andere Versuche das ganze zu lösen nicht erfolgreich.

-> Alle meine Methoden brauchten 2-4 neue Felder in der accounts-table und es wurde bei jedem Aufruf der common was aktualisiert. (= Für die Performance nich tragbar) Darum will ich fragen ob es nicht jemand anderes in dieser Gedankenschmiede versuchen könnte, vl. mit einem besseren Weg.

Es geht um eine Erweiterung der Online-Anzeige in der common, unter den Online-Helden soll ein weiterer Punkt stehen: "Zuletzt gesehen". Darunter werden dann alle User aufgelistet dich nicht online sind aber sich inerhalb der letzten 2 Stunden ausgelogt haben / ausgelogt wurden und hinter dem Namen die Zeit.

Ein Beispiel:
$this->bbcode_second_pass_code('', '2 Helden:
Bauernjunge Kashew
Bauernmädchen Lorn

0 Rpg-Helden:
Keine Rpg-Helden da

0 Moderatoren:
Keine Moderatoren da

Zuletzt gesehen:
Bauernjunge Lung (vor 20 min)
Ritter Harlew (vor 1 Stunde, 15 min)')

Ich bin sicher es gibt eine einfache, elegante Lösung mit der date-function, den Feldern login, dem timeout etc.. Leider hab ich sie nicht finden können. 8/

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 08 Dez, 2007 12:13 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Was wäre, wenn du es einfach in der setnewday.php jeweils aktualisieren lässt?
So könnte man auch das Query pro Klick weglassen.

Was date() anbelangt, kann ich gerade auch nicht gross weiterhelfen, bin selbst auch nicht wirklich begabt auf diesem Gebiet ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 08 Dez, 2007 12:55 
Offline
Marquis Pherae
Marquis Pherae

Registriert: Mi 09 Feb, 2005 16:01
Beiträge: 3925
Wohnort: Basel
Geschlecht: Männlich
Ja, das geht tatsächlich einfacher:

$this->bbcode_second_pass_code('', 'SELECT
`name`, `superuser`, `laston`
FROM
`accounts`
WHERE
`locked` = 0 AND
`loggedin` = 1 AND
`laston`>"'.date("Y-m-d H:i:s",strtotime("-2 hours")).'"
ORDER BY
`level` DESC, `acctid` ASC')

Müsste theoretisch funktionieren.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Sa 08 Dez, 2007 16:58 
Offline
Freak
Freak
Benutzeravatar

Registriert: Sa 15 Okt, 2005 14:06
Beiträge: 864
Geschlecht: Männlich
LoGD: http://shinobilegends.com
Richtig.

Wäre aber immer noch eine query auf die gesamte Accounts Tabelle mehr je Hit auf der Index.

Ich würde das noch cachen daß das nur alle 2 minuten abgefragt wird.

_________________
Entwicklung Lotgd 1.2.2 +nb
1.2.1 +nb ist final

Bugreports/Testing erwünscht, http://nb-core.org

Wichtige Info für Programmierersucher:
viewtopic.php?f=34&t=4285


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 09 Dez, 2007 21:57 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
8) Danke euch Leute!!

Hm... Wie würde das mit dem Cachen laufen, Nightborn?

Habs bis jetzt so und es funktioniert wenn mans unter die Online-Liste setzt:

[php]// Zuletzt online Anfang
$sqln="SELECT name,laston FROM accounts WHERE locked=0 AND loggedin=0 AND laston>'".date("Y-m-d H:i:s",strtotime(date("r")."-2 hours"))."' ORDER BY aufstiege DESC";
$resultn = db_query($sqln) or die(sql_error($sqln));
$anzahl=db_num_rows($resultn);
if (db_num_rows($resultn)>=1){
$ret.=appoencode("`n`tKür`^zli`qc`Qh `qge`^se`then:`n");
while ($rown = db_fetch_assoc($resultn)){
$werwarda="`q$rown[name]`n";
$ret.=appoencode("$werwarda");
addnav("1$werwarda","index.php");
}}
// Zuletzt online Ende[/php]

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 09 Dez, 2007 22:09 
Offline
Freak
Freak

Registriert: So 30 Okt, 2005 17:48
Beiträge: 1408
Wohnort: PB
Geschlecht: Männlich
LoGD: http://dav.blood-reaver.de/lotgd/
Mit Chachen ist gemeint, dass du die Ausgabe des Querys in einer Textdatei oder einem settings-Filed oder öhnlichem liest, wohinein du es in regelmäßigen Abständen speicherst. Dadurch muss nicht bei jedem aufruf der index.php noch sin query über die komplette Accounts-Tabelle gejagt werden.

_________________
Mehr oder minder inaktiv


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 09 Dez, 2007 22:31 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
@Auric:
settings-Feld?! - Bist du des Wahnsinns? :? :D

Natürlich ist es angebrachter eine TXT-Datei zu nehmen, wie Du es erwähnt hattest. So sparst Du die Verbindung zum (mySQL-)Server und kannst in ruhe mit PHP- weiterarbeiten, ohne Timestamps o.Ä. noch auswerten zu müssen.... :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: So 09 Dez, 2007 22:50 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Hm, wär sowas dann nich auch gut für die hof.php?

Wird das irgendwo in der logd-standard-version gemacht damit ichs mir anschaun kann?

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 10:53 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Bei der hof.php ists insofern nicht allzu schlimm, da diese nicht ganz so oft aufgerufen wird ;-)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 11:26 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
In der LotGD- Standard Version?! - Bitte was...??
Ein Cache System von Inhalten o.Ä. gibt es für die 1.x.x. Vor gut 1-2 Jahren hatte ich mal eines für die 0.9.7 geschrieben gehabt. Aber weg ist weg. ^^ - Dennoch sehr, sehr sinnvoll das ganze.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 11:30 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Natürlich ist es sinnvoll.

Aber nur für die hof.php eines zu entwickeln fände ich persönlich nicht wirklich nötig. ^^


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 11:31 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Jaein..., aber sie wird nicht ständig eingesehen. Das würde ich nicht unbedingt behaupten wollen. Bei der Bio, dem Chat o.Ä. würde es sich um so mehr lohnen und auch zeigen, was es bringt. (das cachen)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 11:37 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
*nick* Auf jeden Fall, da will ich es auch gar nicht abstreiten.

Auch gewisse sich nur selten verändernde Daten wären gecacht wohl um einiges besser aufgehoben.


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 12:00 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Das mit dem Cache ist eig. ganz einfach...
Man muss lediglich ein Cache- Verzeichnis erstellen, worin sich die (gecachten) Dateien befinden. Und dann einfach den Zeitstempel der Datei mit dem gegebenen Zeit Interval abgleichen, und dann ggf. erneut Cachen bzw. den Cache aktualisieren. Für das gibt es schon Funktionen... (siehe filemtime)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 12:17 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
[php]function cache_speichern($wert, $dateiname, $wann) {

$dateizeit = filemtime("cache/".$dateiname);
$timestamp = time() - $wann;

if ($dateizeit > $timestamp) {
if (file_put_contents("cache/".$dateiname,$wert)) {
return TRUE;
}
else {
return FALSE;
}
}
else {
return TRUE;
}
}

function cache_lesen($dateiname) {

$dateiname = "cache/".$dateiname;

if (file_exists($dateiname)) {
return file_get_contents($dateiname);
}
else {
return FALSE;
}
}
[/php]

Irgend sowas?
$wann sollte dann natürlich in Sekunden angegeben werden... ^^

Oder sowas
[php]function cache($wert, $dateiname, $wann) {

$dateizeit = filemtime("cache/".$dateiname);
$timestamp = time() - $wann;
$dateiname = "cache/".dateiname;

if ($dateizeit > $timestamp) {
if (file_put_contents($dateiname,$wert)) {
return file_get_contents($dateiname);
}
else {
return FALSE;
}
}
else {
return file_get_contents($dateiname);
}
} [/php]


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 13:40 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Hm... Aber eigentlich würde es doch reichen wenn ich die Liste der Namen in ein Feld in der Datenbank speichere und alle 2 min auslese, oder?

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 13:45 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Wenn du sie nur alle zwei Minuten auslesen würdest, hättest du auch nur alle 2 Minuten eine Ausgabe auf dem Bildschirm ;-)
(Sofern du in der Zwischenzeit mal die Seite verlassen hast).


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 14:01 
Offline
Freak
Freak

Registriert: Mo 06 Sep, 2004 15:17
Beiträge: 3236
Geschlecht: Männlich
Song Sinen hat geschrieben:
Hm... Aber eigentlich würde es doch reichen wenn ich die Liste der Namen in ein Feld in der Datenbank speichere und alle 2 min auslese, oder?

-Wer sich alles richtig durchliest, ist ganz klar im Vorteil!! Siehe dazu unten.


Kevz hat geschrieben:
@Auric:
[....]
Natürlich ist es angebrachter eine TXT-Datei zu nehmen, wie Du es erwähnt hattest. So sparst Du die Verbindung zum (mySQL-)Server und kannst in ruhe mit PHP- weiterarbeiten, ohne Timestamps o.Ä. noch auswerten zu müssen.... :)


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 15:01 
Offline
Profi
Profi
Benutzeravatar

Registriert: So 01 Apr, 2007 09:31
Beiträge: 155
Das is schon klar Kevz, musst nich gleich zicken. Wenn ich aber die Timestamps nur alle 2 min auswerte und dann die User mit Farbcodes und allem als Text in ein Feld schreibe berechnet er es auchnicht öfters.

Und irgendwie kann ich mir nich vorstellen dass es viel rausreist vl. 100 Zeichen aus nem Feld in der Db zu holen wenn er die index läd.
Darum die Frage.

_________________
I <3 Eliwood
_______________
$a=b;
$b=a;
$$a=a;
_______________
Faust: Was ist mit diesem Rätselwort gemeint?
- Faust I, Z. 1337


Nach oben
 Profil  
Mit Zitat antworten  
 Betreff des Beitrags:
BeitragVerfasst: Mo 10 Dez, 2007 16:09 
Offline
Freak
Freak

Registriert: So 29 Jan, 2006 09:41
Beiträge: 1927
Wohnort: Schweiz
Geschlecht: Männlich
Skype: louis.huppenbauer
Kommt halt auch ganz auf die Dimensionen des Servers an.
Und mit welcher Philosophie man programmiert. Falls es einem in erster Linie um Einfachheit in den Skripten geht, so kann man es womöglich auf diese Art machen. Wenn man jedoch auch etwas auf Performance achten will, geht das nunmal nicht immer.

Zudem sei gesagt, dass Performance-Verlust nicht linear, sondern exponentiell ist. Irgendwann wird vielleicht genau dieses Query schon einiges ausmachen.


Natürlich verbraucht er nicht allzu viel, um nur dieses eine Resultat aus der Datenbank (Settings oder dergleichen) zu holen. Allerdings sind 100 Zeichen wohl je nach Server deutlich zu wenig. Ein Name samt Titel und Farbzeichen kann schnell mal an die 20 Zeichen brauchen, und da hast du die 100 Zeichen schon nur mit 5 Spielern voll.

MySQL ist nunmal der Flaschenhals in LoGD und macht oft den grossen Teil der Ladezeit aus, daher sollte man darauf achten, die Anzahl der Query's wenn möglich stets zu reduzieren.


Mit freundlichen Grüssen,
Harthas


Nach oben
 Profil  
Mit Zitat antworten  
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 25 Beiträge ]  Gehe zu Seite 1, 2  Nächste

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 16 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen
Du darfst keine Antworten zu Themen in diesem Forum erstellen
Du darfst deine Beiträge in diesem Forum nicht ändern
Du darfst deine Beiträge in diesem Forum nicht löschen
Du darfst keine Dateianhänge in diesem Forum erstellen

Suche nach:
Gehe zu:  
POWERED_BY
Deutsche Übersetzung durch phpBB.de
anpera.net - Impressum