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 09
MartinAllgemein, Internet
So ihr lieben heute habe ich ein paar Gutscheine für euch im Gepäck
Es handelt sich hierbei um 10 Gutscheine des Webhosters Netcup im Wert von je 5€. Bei Netcup gibt es vom Einsteiger Webspace (ab 0,19€ / Monat) über vServer bis hin zu Managed vServer alles, was man für einen Gelungenen Webauftritt benötigt. Der Gutschein Code kann einfach beim bestellen mit Angegeben werden und schon hat man 5€ gespart.
Hier die Gutscheincodes:
36nc12786822950
36nc12786822951
36nc12786822952
36nc12786822953
36nc12786822954
36nc12786822955
36nc12786822956
36nc12786822957
36nc12786822958
36nc12786822959
(falls alle Gutscheine aufgebracht sind, schreibt einen Kommentar, dann bekommt ihr neue)
Ein sonniges Wochenende euch allen.
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.
Mai 15
MartinEntwicklung, Software
Heute geht für einen Leser ein Wunsch in Erfüllung. Viel Spaß beim lesen. Falls du dir auch einen Beitrag wünschen willst, schreib mir eine eMail.
Betreiber von Onlinespielen sowie Chats sind immer auf der suche nach sogenannten Doppel- oder Multi-Accounts, das sind Benutzer, die sich öfter auf einer Plattform wie einem Browsergame anmelden um dadurch Vorteile zu erhalten.
Das man sich dabei nicht nur auf sein Gespür verlassen sollte sollte natürlich auch klar sein, darum was kann man machen, damit solche User von vornherein keine Chance haben? Mit ist das sofort eine IP Sperre in den Sinn gekommen, gesagt getan, ich habe meine bestehenden IP Felder – welche die IP Adresse des letzten Logins beinhält – beim Login des Spielers nach seiner IP Adresse abgesucht und wenn sich ein User binnen weniger Stunden öfter als ein mal eingeloggt hat, hab ich ihm den Login untersagt.
Folgendermaßen sieht mein Script aus:
// IP Adresse vom User holen
$ip = $_SERVER['REMOTE_ADDR'];
// die Zeit ab der nach gleichen IPs gesucht wird
$time = time() - 24*60*60;
// nun kann die IP Adresse im users Table gespeichert werden
mysql_query("UPDATE users SET ip = '".$ip."' WHERE userid = '".$userid."'");
// nun können wir prüfen ob andere Benutzer mit dieser IP vorhanden sind
$count = mysql_num_rows("SELECT userid FROM users WHERE ip = '".$ip."' AND last_login > '".$time."'");
if($count > 1)
{
die('TO MUCH USERS PER IP!');
}
(Geschrieben in PHP)
Dies wäre nun die Brutale Lösung (Kann allerdings durch zusätzliche Filter wie z.B. Punkte entschärft werden), welche alle Multi Account Spieler Aussperrt. Das kann allerdings auch negative Nebeneffekte haben, und zwar können so Familien, Wohngemeinschaften und Büros diese Seite nicht mehr nutzen, da dort alle über einen Internet Anschluss ins Internet gehen und somit eine IP Adresse haben.
Deswegen empfehle ich solange sich der dadurch entstandene Schaden der durch solche Doppelaccounts entsteht in Grenzen hält erst ein mal ein Script zu schreiben, welches alle Doppelaccountspieler auflistet, um diese explizit zu befragen oder ihre Accounts zu überprüfen.
Folgendermaßen hab ich das einmal für ein Mafia Browsergame gemacht:
$query = mysql_query("SELECT ip, userid, username FROM users");
while($users = mysql_fetch_array($query))
{
// nun gehen wir alle user nach und nach durch
// falls auch hier ein Zeitlimit benötigt wird, kann das von oben übernommen werden
$count = mysql_num_rows("SELECT userid FROM users WHERE ip = '".$users['ip']."'");
if($count > 1)
{
// nun da es ja offensichtlich ein Multiaccount Spieler ist, wird er ausgegeben
// wenn gewünscht könnte man auch in diesem Schritt Informationen zu den
// gespielten Accounts holen, allerdings würde das dieses Beispiel sprengen
echo $users['username'] - $users['ip'];
}
}
(Geschrieben in PHP)
Nun haben wir 2 Möglichkeiten in Betracht gezogen wie man mit Doppelaccounts fertig wird. Ich hoffe sie finden Anklang, und Helfen den Admins bei ihrer Täglichen Arbeit.
Mai 08
MartinEntwicklung, Software
Da dieser Artikel aus unserem alten Wiki oft angefordert wird, hier das Backup davon:
Fürs Webdesign und die Webentwicklung werden natürlich Apache (Webserver), PHP, MySQL und noch ein paar andere Tools wie Pearl oder Python benötigt, dieser Artikel zeigt wie man LAMPP, bzw. XAMPP auf dem eigenem Linux System installiert.
Herunterladen
Als erstes muss das Archiv heruntergeladen werden. Einen Aktuellen Link finden Sie hier:
http://www.apachefriends.org/de/xampp-linux.html
Installieren
Installieren muss man eigentlich gar nichts, man muss lediglich das heruntergeladene Archiv ins Verzeichniss /opt entpackt werden. Dies erledigen Sie mit dem Befehl tar:
Sie müssen diesen Befehl mit root Rechten ausführen!
tar xvfz xampp-linux-1.7.tar.gz -C /opt
Ersetzten Sie “xampp-linux-1.7.tar.gz” durch das von ihnen heruntergeladene Archiv!
Nun ist die Installation abgeschlossen.
Starten
Um jetzt Lampp zu starten müssen Sie lediglich eine Konsole öffnen und:
ausführen, und zwar mit root Rechten.
Autostart
Damit Lampp Automatisch startet, öffnen Sie die Datei:
Und fügen Sie den Befehl zum Starten von Lampp ein:
Speicheren Sie nun ab. Jetzt sollte LAMPP bei jedem Hochfahren Automatisch starten.
Wenn ein Dienst nicht startet
Falls ein oder mehrere Dienste nicht starten wie z.B. Apache, PHP, MySQL, usw. müssen Sie die Rechte des LAMPP Verzeichnisses anpassen, dies machen Sie mit dem Kommando chmod. Öffnen Sie eine Konsole und führen folgendes aus (Natütlich mit root Rechten):
Nun müssen Sie noch den Konfiugurationsdateien die richtigen Rechte zuweisen.
chmod 755 /opt/lampp/etc/my.cnf
Und
chmod 755 /opt/lampp/phpmyadmin/config.inc.php
Nach diesem Schritt sollten zwar die Dienste wieder laufen, aber es hat nun jeder vollen Zugriff auf die Dateien und Verzeichnisse! Falls Sie die Dienste mit dieser Methode wieder in Gange bringen wollen, sollten Sie eine Firewall während Sie LAMPP am laufen haben verwenden.
Tipps
Ein Paar Tipps, die den Umgang mit LAMPP erleichern.
MySQL Passwort
Es ist kein MySQL Passwort gesetzt, d.h. das Feld einfach frei lassen.
Wo kommen die html/php Dateien hin
Ihre html/php Dateien kommen hier hin:
Achten Sie darauf, das die richtigen Rechte für die Dateien gesetzt sind!
PHP.ini
Die PHP.ini finden Sie hier:
Weiterführende Links
http://www.apachefriends.org/de/index.html - Webseite von XAMPP und LAMPP
http://www.apachefriends.org/de/xampp-linux.html – Webseite von LAMPP
Older Entries
Letzte Kommentare