Aug 27
MartinAllgemein, Internet
Wie ihr es vielleicht schon bemerkt habt, ist LinuxDoku in den letzter Zeit wiedermal total langsam. Ich bitte dieses Verhalten zu entschuldigen.
Ich weiß nicht was ich an WordPress noch alles ändern soll, ich habe bereits Code ausgemistet, Plugins rausgeschmissen und Caches eingerichtet, aber WordPress lahmt immer noch sehr. Am Hoster sollte es auch nicht liegen, da auf selbigem ein schnelles Drupal mit einigen Modulen läuft. Die Datenbank arbeitet für die Monatliche Miete auch relativ performant (als Server Besitzer ist man ziemlich verwöhnt was das angeht
).
Warum ich die ganze Seite nicht auf meinen Server packe?
Ganz einfach, über diesen Webspace laufen unter anderen meine Mail Adressen, Privates Wiki und Dateiablage, auf welche ich auch im Falle eines Serverausfalls gerne Zugriff hätte. Da mir bei diesem Hoster erst ein mal ein Ausfall in nun schon ganzen 3 Jahren untergekommen ist, denke ich ist das auch die beste Lösung.
Mal sehen evl steige ich ja irgendwann mal auf Serendipity, Drupal oder das neue Litotex um, um diese lästige WordPress Installation loszuwerden…
Aug 15
MartinEntwicklung
Eben habe ich eine kleine Funktion geschrieben um zu Prüfen ob ein gegebener Timestamp heute ist, nichts gewaltiges aber nützlich.
function isToday($time)
{
$begin = mktime(0, 0, 0);
$end = mktime(23, 59, 59);
// check if given time is between begin and end
if($time >= $begin && $time <= $end)
{
return true;
} else {
return false;
}
}
Falls ab 23 Uhr Abends false zurückgegeben wird, sollten Sie mal nach ihrer Server Uhr schauen (Zeitzonen oder Sommer-/Winter- Zeit).
So wird unter anderem in Resigame eine Anzeige gesteuert, die Signalisiert ob ein User heute bereits Online war.
Aug 15
MartinEntwicklung, Software
Mein kleiner Debian Test Server hat die letzten Tage unwahrscheinlich viel Ram gezogen. Von 265MB welche verbaut sind, nutzte er bereits nach einem Neustart ganze 75% – das kann es ja nicht sein, schließlich laufen dort lediglich ein Lighttpd, MySQL, Exim4, Courier und SSH, also nichts weltbewegendes. Zu diesem Zeitpunkt griff ich auch nur mit 2 Rechnern auf meine PHP Anwendungen zu.
Also begann ich die vielen php5-cgi Prozesse genauer unter die Lupe zu nehmen, da diese am meisten Ram brauchten. Nach einigem unnützen hin und herstellen in der PHP.ini wagte ich mich noch an die FastCGI Konfiguration von Lighttpd, dort habe ich nur so zum Test die PHP_FCGI_CHILDREN heraus geschmissen und siehe da, der Server benötigt nach einem Neustart des Webservers Lighttpd nur noch gute 30 bis 50% Ram, wenn das mal kein befriedigendes Ergebnis ist.
Des weiteren habe ich nun anstatt 12 php5-fcgi Prozessen nur noch 4 Stück. Offenbar beendet PHP oder FastCGI die Geforkten Tasks nicht mehr richtig …
Laut PHP Bugtracker existiert dieser Bug schon seit gut 3,5 Jahren: http://bugs.php.net/40286
Jul 07
MartinEntwicklung
Ein Leser dieses Blogs hat vor kurzem den Wunsch nach einem Artikel geäußert, wie er eine Ähnliche “letzte Tweets Anzeige” wie auf www.Resigame.de bauen kann. Nun so schnell kann es gehen
Da Twitter eine API bzw. von jedem Nutzer eine XML Datei mit Tweets und anderen Account Infos bereitstellt, haben wir leichtes Spiel an die Daten zu kommen.
So können wir die Datei auslesen:
$tweets = simplexml_load_file('http://www.twitter.com/status/user_timeline/[NUTZERNAME].xml');
[NUTZERNAME] muss natürlich mit dem Name des Twitteraccounts ersetzt werden, z.B. “Resigame”.
Aus dem Objekt $tweets können wir nun die letzte Nachricht auslesen:
echo $tweets->status->text;
Alle anderen verfügbaren Objekte kannst du herausfinden, indem du die XML Datei direkt im Browser aufrufst (Dort wird es sogar als Tree dargestellt).
Um auf ältere Nachrichten zuzugreifen kann hinter Status die Zahl angegeben werden, von der aus die Nachrichten “herab” gezählt werden (allerdings wird bei 0 begonnen!):
echo $tweets->status{2}->text;
Dies würde uns Beispielsweise die 3. letzte Statusnachricht anzeigen.
Um nun die letzten 3 Nachrichten anzuzeigen verwenden wir einfach eine Schleife:
$i = 0;
while($i <= 2)
{
echo $tweets->status{$i}->text.'<br>';
$i++;
}
(mit for Schleifen hab ich es nicht so
)
Da nun aber bei jedem Aufruf der Seite die Twitter XML Datei neu heruntergeladen werden muss, was nicht gerade Traffic und Ressourcenschonend ist – Kleinvieh macht schließlich auch Mist – Cachen wir nun die Datei:
if(filectime('twitter.xml') < time() - (60*10)) {
// download file
$file = file_get_contents('http://www.twitter.com/status/user_timeline/[NUTZERNAME].xml');
file_put_contents('twitter.xml', $file);
}
$tweets = simplexml_load_file('twitter.xml');
Nun wird erst überprüft ob die Datei twitter.xml, welche im gleichen Ordner wie das Script liegt in den letzten 10 Minuten geändert wurde. Ist das der Fall wird das erneute Herunterladen übersprungen, wenn nicht (also wenn der Änderungszeitpunkt länger als 10 Minuten her ist), wird die XML von Twitter heruntergeladen und in unsere twitter.xml geschrieben.
Anschließend wird die twitter.xml geparst.
Das wäre es auch schon, in den nächsten Tagen zeige ich euch dann noch wie ihr die Twitter Nachrichten mittels jQuery schön als Newsticker laufen lassen könnt.
Jun 23
MartinAllgemein, Entwicklung, Hardware
Browsergames – jeder kennt eines, viele Spielen eines und so mancher hat selbst schon einmal eines Entwickelt. Doch welcher Aufwand ist es ein solches zu Entwickeln und wie Betreibe ich eines?
Welche Technik und Infrastruktur steckt hinter Browsergames?
Ein Browsergame ist im Grunde eine normale Webseite welche in PHP, Phyton, Perl oder sonst irgendeiner Programmiersprache Entwickelt sein könnte. Oft kommt dazu noch ein wenig JavaScript um es für den Nutzer ansprechender zu Gestalten.
Auf Serverseite sieht es auch meist gleich aus, es werkelt mindestens ein Linux Server mit der Verwenden Script Sprache und einer Datenbank, sowie einem Mailserver. Wird das Browsergame jedoch größer findet hier meist eine Trennung zwischen Web-, File-, Database- und Mail Server statt, da diese dann entsprechend optimiert und die Last somit besser verteilt werden kann.
Im Grunde ist das ganze bisher kein Hexenwerk, geht man aber ins Detail trifft einen der Schlag. Eine normale Webseite wird pro Besuch vielleicht 5 bis 10 mal aufgerufen, hierbei wird die Seite mit Menü und Konsorten aus einer Datenbank gelesen und falls das System schlau ist in einen Cache geschrieben. Bei einem Browsergame hingegen kann nichts gecached werden, da alles Dynamisch für den Spieler aufbereitet wird.
In Zahlen, eine Webseite hat pro Besuch 5 bis 10 Requests. Ein Browsergame kann auch mit diesen 5 bis 10 Requests auskommen, doch dazu kommen noch die AJAX Abfragen, welche nahezu sekündlich ausgeführt werden. Nehmen wir einmal an es wird alle 5 Sekunden eine AJAX Abfrage ausgeführt, dann sind wir schon bei ganzen 12 Weiteren Abfragen pro Minute (Man beachte im Normalfall sind es noch einige mehr!) das würde bei einer Durchschnitts Onlinezeit von 15 Minuten ganze 180 Requests ausmachen!
Wie optimiere ich meinen Server?
Gehen wir mal davon aus, das das Spiel perfekt auf die vielen Requests ausgelegt ist. Was kann man dann auf der Server Seite machen?
Einen kleinen schnellen Webserver verwenden, ich empfehle an dieser Stelle Lighttpd, welcher aus meiner Sicht sich für ein solche Unterfangen wesentlich besser eignet als Apache(2). In der Konfigurationsdatei können unter anderem auch diverse Module wie “webdav”, “rewrite” und falls es nicht benötigt wird das Modul “accesslog” deaktiviert werden. Je nach Bedürfnis können natürlich Module ein- bzw. abgeschaltet werden, allerdings sollte die Liste der aktiven immer so kurz wie möglich gehalten werden.
Seitens der Scriptsprache. Da hier keine explizit festgelegt wurde, an dieser Stelle nur einige allgemeine Hinweise. In den jeweiligen Konfigurationsdateien gibt es oft eine Reihe an Parametern, mit denen man Funktionen abschalten kann, welche nicht unbedingt benötigt werden, beispielsweise, das im Header gesendet wird, das diese Seite mit PHP Version 5.3.x erstellt wurde. Tipps gibt es in einschlägigen Webseiten, Foren und Blogs.
So wenig Dienste als möglich! Das sagt eigentlich schon alles, im Hintergrund sollte keine Sinnlosen Dienste wir FTP laufen, wenn diese gar nicht benötigt werden. Sollte es der Fall sein, das man einen dieser Dienste benötigt, einfach schnell via SSH einloggen und nach nicht einmal 10 Sekunden läuft der Dienst.
Gute Hardware ist die halbe Miete. Nicht nur Zuhause beim Entwickeln, auch Online erspart gute Hardware viele Schlaflose Nächte, in denen der Server überlastet ist oder sich aufgehängt hat. Ich empfehle so viel RAM wie möglich und einen Schnellen CPU.
Fazit
Browsergames sind wahre Ressourcenfresser, doch mit der richtigen Hardware, den Perfekten Einstellungen und natürlich Sauber und Performant geschriebenen Quellcode steht dem Spaß nichts mehr im Wege.
Older Entries
Letzte Kommentare