Machbarkeitsanfrage Python oder andere Sprache

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Wenn Dich Englisch nicht schreckt, könnte Dir vielleicht Game Programming with Python eine Hilfe sein. Hier werden viele grundlegende Dinge der Spieleprogrammierung mit Python abgehandelt, u.a. auch Online-Spiele. Es ist zwar nicht ganz billig, bei caiman_amerika aber neu zum halben Preis (28,38 €) erhältlich.
MfG
HWK
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Oh, das Werk habe ich hier sogar liegen. Mal für ~15 € bei Amazon zShops geschossen. Dauert 'n paar Wochen, bis es aus Amerika/Australien/whatever da ist, aber man spartsehr viel Geld.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Von Oktober 2003, ist das noch aktuell genug? War damals nicht Python 2.1 oder sowas? Vielleicht bräuchte ich ja mehr so ein generelles Netzwerk Grundlagenwerk?? Gibt ja noch ein neueres Werk... Beginning Game Development with Python and Pygame: From Novice to Professional (Expert's Voice)
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Yogi hat geschrieben:...Vielleicht bräuchte ich ja mehr so ein generelles Netzwerk Grundlagenwerk??...
Das hier fand ich ganz toll: Foundations of Python Network Programming
MfG
HWK
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

HWK hat geschrieben:
Yogi hat geschrieben:...Vielleicht bräuchte ich ja mehr so ein generelles Netzwerk Grundlagenwerk??...
Das hier fand ich ganz toll: Foundations of Python Network Programming
Ohne das Buch gelesen zu haben würde ich sagen, dass ein Buch zu TCP/IP an sich schon sehr brauchbar sein kann, da Pythons ``socket``-Modul BSD-sockets nachempfunden ist und somit viele Dinge übertragbar sind. Natürlich, es gibt noch Asyncore/Medusa und Twisted, aber so viel tut sich in der Richtung nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Jo! das klingt wirklich gut. Das gehört wohl unter mein Kopfkissen...
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

gerold hat geschrieben:Man kann auch mehrere Datenbankserver im Multimaster-Betrieb zusammenschließen.
Z.B. damit:

http://bucardo.org/

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Hi, ich dachte ich mache keinen neuen Thread auf, sondern ergänze den bestehenden.

Also, ich bin in meinem Ski-Urlaub fleissig gewesen und habe den Prototypen fertig gestellt. Es ist gut zu wissen, dass meine Idee nicht nur spinnert ist, sondern auch tatsächlich funktioniert, auch wenn ich für die visuelle Darstellung für 1000 Clients überdenken muss, da ist dann einfach zu viel los auf dem Screen. Aber das ist ganz gut, dann kann ich mit einem vernünftigen LOD, Ausblendung weiter entfernter oder nicht im Sichtfeld befindlicher Clients auch die Datenmenge schön reduzieren.

Aber jetzt wird echt happig, ich möchte jetzt alles Client-Server mässig in Python umsetzen. Und obwohl ich schon reichlich gelesen habe über Frameworks etc., bin ich kein bisschen schlauer. Immer, wenn ich denke ich habe eine Kombi, dann gibt es Stimmen, die sagen, neeee, bloss das nicht, nimm lieber das und das.... ich blick da nicht mehr durch.

Aus Kostengründen möchte ich gern erst einmal ein Server-System zu Hause aufsetzen, bevor ich einen dedicated miete.

Da wäre also erst einmal die OS Frage zu klären. Ich halte Debian 4 für eine gute Wahl, muss mich da aber erst einmal einlesen. Am liebste würde ich gerne während der anfänglichen Entwicklung unter Windows bleiben, sofern das möglich ist.

Als Datenbank MySQL.

Als Server dachte ich an CherryPy, weil das anfangs einfacher einzurichten sein soll und weil ich später Apache vorschalten kann.

Bei Apache habe ich Sorge vor den Konfiguration und den Sicherheitslücken.

Als ORM für die Datenbank dachte ich an SQLAlchemy oder Storm.

Als Templating System dachte ich an Mako oder sogar Cheetah. Da ich anfänglich die Auswertung browserbasiert haben möchte, kann ich mit XML Systemen wie Genshi nichts anfangen.

Tja und was die UDP und TCP betrifft dachte ich erst an Twisted, aber ich habe schon mehrfach lesen müssen, dass das eine ziemlich steile Lernkurve besitzt. Was gibt es noch als Alternative?


Bei allen Paketen sollte gelten, einfach in der Anwendung aber belastbar und bewährt.

Eine weitere Frage ist auch, ist es sinnvoll zwei Server zu benutzen? Der eine für das User-Management etc. und der andere für die Berechnungen und die Übermittlung der Daten für die visuelle Darstellung an die Clients.
Dann könnte ich einen normalen, gewarteten Server nehmen und einen dedicated als zweiten, der dadurch sicherer ist, dass keine Clients darauf zugreifen. Geht das überhaupt? Client sendet und empfängt von Server 1, aber empfängt nur von Server 2. Die Daten von Server2 nach Server1 und dann zum Client dürfte wohl zu lange dauern, oder?

Was meint ihr dazu?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Yogi hat geschrieben:Da wäre also erst einmal die OS Frage zu klären. Ich halte Debian 4 für eine gute Wahl, muss mich da aber erst einmal einlesen. Am liebste würde ich gerne während der anfänglichen Entwicklung unter Windows bleiben, sofern das möglich ist.
Jo, aber dann darfst du auch keine besondere Performance erwarten.
Yogi hat geschrieben:Als Datenbank MySQL.
Postgres. Spätestens wenn du Tabellen bearbeitest, deine Datenbank replizieren willst etc. wirst du bereuen es nicht zu verwenden.
Yogi hat geschrieben:Als Server dachte ich an CherryPy, weil das anfangs einfacher einzurichten sein soll und weil ich später Apache vorschalten kann.
Und allen bereichten nach skaliert es nicht. Nimm etwas anderes.
Yogi hat geschrieben:Bei Apache habe ich Sorge vor den Konfiguration und den Sicherheitslücken.
So schwer ist Apache nicht einzurichten (verglichen etwa mit der ätzenden Konfiguration von Lighty) und auf Debian gibt es Sicherheitsupdates dafür. Die letzte korrigierte Sicherheitslücke in Apache 2 war laut Security Archiv im August 2006, also sogar vor dem Release von Etch.
Yogi hat geschrieben:Als ORM für die Datenbank dachte ich an SQLAlchemy oder Storm.
Würde wohl zu SQLAlchemy raten. Es ist sicherlich komplizierter, aber kann auf lange sicht gesehen mehr (u.a. Sharding).
Yogi hat geschrieben:Als Templating System dachte ich an Mako oder sogar Cheetah. Da ich anfänglich die Auswertung browserbasiert haben möchte, kann ich mit XML Systemen wie Genshi nichts anfangen.
Mako, das ist schneller und recht gut betreut, vom gleichen Autor wie SQLAlchemy. Ich sehe allerdings dein Problem mit Genshi nicht, an welche Stelle stört dich XML?
Yogi hat geschrieben:Tja und was die UDP und TCP betrifft dachte ich erst an Twisted, aber ich habe schon mehrfach lesen müssen, dass das eine ziemlich steile Lernkurve besitzt. Was gibt es noch als Alternative?
asynchat/asyncore, Medusa, Allegra, Kamaelia.
Yogi hat geschrieben:Bei allen Paketen sollte gelten, einfach in der Anwendung aber belastbar und bewährt.
Manchmal muss man eben Kompromisse eingehen.
Yogi hat geschrieben:Die Daten von Server2 nach Server1 und dann zum Client dürfte wohl zu lange dauern, oder?
Schätze das hängt von der Netzwerkanbindung zwischen den Servern ab.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

@Yogi: Zu dem "jeder sagt was anderes" würde ich sagen: Fang erst einmal an und geh' davon aus, dass Du eh eine Menge 2 bis 3mal neu schreiben wirst, wenn das alles noch komplettes Neuland für Dich ist.

Du könntest zum Beispiel erst einmal auf CherryPy aufsetzen und das Wissen, dass Du den Server später vielleicht noch einmal wechseln wirst, dazu nutzen die Logik sauber vom Rest zu trennen.
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

@Leonidas:
Jo, aber dann darfst du auch keine besondere Performance erwarten.
Wie meinst du das?
Postgres
Ok, werde ich checken.

Bei CherryP habe ich aber den Anfangsvorteil eines schell aufgesetzten Servers und dass ich von da aus immer noch Apache mit ins Boot nehmen kann.

Aber vielleicht nimm ich erst einmal ein WAMP für den Anfang und taste mich langsam vor....?
Würde wohl zu SQLAlchemy raten.
Dann ziehe ich mir mal die Doku rein, wenn ich keine Zugang dazu finde, teste ich mal Storm.

Ich sehe allerdings dein Problem mit Genshi nicht, an welche Stelle stört dich XML
Ich denke, dass es in meinem Fall besser ist Python Code direkt eingebaut zu haben, da ich so eher so eine Art Browsergame realisieren kann, aber vielleicht irre ich mich da auch.

asynchat/asyncore, Medusa, Allegra, Kamaelia.
Checke ich mal durch, gibts da eine besondere Empfehlung?

@BlackJack:
Gerade der Anfang ist ja das schwerste. Ich kann mich vor lauter Angeboten nicht entscheiden und natürlich möchte ich nicht komplett meine Entscheidungen mitten während der Testphase revidieren müssen.
Wenn erst einmal mehrere Leute das System nutzen und ich muss dann alles neu machen bzw. eine längere Auszeit einläuten ist das nicht so optimal.

Ich möchte, glaube ich vor allem keine Sackgassen-Lösung, wenn das überhaupt machbar ist....??
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Yogi!
Leonidas hat geschrieben:
Yogi hat geschrieben:Am liebste würde ich gerne während der anfänglichen Entwicklung unter Windows bleiben, sofern das möglich ist.
Jo, aber dann darfst du auch keine besondere Performance erwarten.
Du wirst während der Entwicklung keinen Unterschied merken.
Leonidas hat geschrieben:
Yogi hat geschrieben:Als Datenbank MySQL.
Leonidas hat geschrieben:Postgres.
Postgres!
Leonidas hat geschrieben:
Yogi hat geschrieben:Als Server dachte ich an CherryPy
Und allen bereichten nach skaliert es nicht. Nimm etwas anderes.
CherryPy ist sauschnell, nimmt dir viel Arbeit ab und in Verbindung mit dem Apachen ein absoluter Sprinter. Du wirst nichts besseres finden was so einfach zu verwenden ist.
Yogi hat geschrieben:ORM für die Datenbank
ORMs sind eine zusätzliche Schicht zwischen der Datenbank und deinem Programm. Das ist für einfache Programme vielleicht ein Vorteil für Leute, die mit SQL nichts anfangen können.
Das kostet aber auch Rechenleistung und erschwert dir, die volle Performance aus dem Datenbankmanagementsystem raus zu kitzeln. Bei deiner Anwendung empfehle ich dir recht viel (Prozeduren, Trigger, Funktionen,...) direkt auf dem Datenbankserver PostgreSQL zu erledigen.
Yogi hat geschrieben:Die Daten von Server2 nach Server1 und dann zum Client dürfte wohl zu lange dauern, oder?
Daten übertragen dauert immer seine Zeit. Aber auch das Raussuchen der Daten aus der Datenbank. Noch dazu greift der Computer dafür auf die Festplatten zu. Und Prozessorleistung wird auch verbraten. All das kannst du damit auslagern und die Rechenzeit in der Zwischenzeit für andere Anfragen verwenden. Und sobald die Daten vom Datenbankserver angekommen sind, schickst du sie zum Client.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Yogi!
Yogi hat geschrieben:Ich denke, dass es in meinem Fall besser ist Python Code direkt eingebaut zu haben, da ich so eher so eine Art Browsergame realisieren kann
[...]
Ich möchte, glaube ich vor allem keine Sackgassen-Lösung
Und genau damit würdest du in eine Sackgasse fahren.

Trenne die Darstellung vom Programm!!!

Nimm auf jeden Fall eine Vorlagensprache. Welche, ist ziemlich egal. Hauptsache ist, dass du so gut wie keine Logik in die Darstellung verlagerst. So etwas **galt** vor einigen Jahren mit "Active Server Pages" noch als schick. Inzwischen hat man größtenteils eingesehen (sogar PHP-Entwickler haben sich weiterentwickelt), dass sich solche Programme sehr schwer erweitern/verbessern lassen. Von meinen ASP-Programmen existiert kein einziges mehr.

gerold hat geschrieben:Bei deiner Anwendung empfehle ich dir recht viel (Prozeduren, Trigger, Funktionen,...) direkt auf dem Datenbankserver PostgreSQL zu erledigen.
Ich verwende unter Windows den SQL-Manager um PostgreSQL-Datenbanken zu entwickeln.

http://sqlmanager.net/products/postgresql/manager/

Die kostenlose LITE-Version kann zwar nicht so viel wie die Vollversion -- aber immer noch besser als nur mit PgAdmin arbeiten zu müssen.

mfg
Gerold
:-)
Zuletzt geändert von gerold am Montag 24. März 2008, 17:02, insgesamt 1-mal geändert.
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Yogi hat geschrieben:Bei CherryP habe ich aber den Anfangsvorteil eines schell aufgesetzten Servers und dass ich von da aus immer noch Apache mit ins Boot nehmen kann.
Ein Apache/Lighty/nginx/* wird ohnehin nur interessant, um der Python-Applikation selbst das Ausliefern von statischen Daten (Bilder, Videos usw.) abzunehmen, da Erstere darin entsprechend schnell sind.
Yogi hat geschrieben:Aber vielleicht nimm ich erst einmal ein WAMP für den Anfang und taste mich langsam vor....?
Ein einfacher Python-HTTP-Server (wsgilib, Paste, CherryPy, ...) reicht für den Anfang und läuft auf den gängigen Betriebssystemen. Später kannst du da nach Belieben etwas vorschalten und, im Falle einer WSGI-Anwendung, den Unterbau austauschen.
Würde wohl zu SQLAlchemy raten.
Ich dir auch. Rein mit SQL gegen ein spezielles DBMS zu programmieren, wäre mir sowohl zu umständlich als auch zu unflexibel. Optimieren kann man dann immer noch, und bzgl. der Erzeugung von angepassten Queries ist man mit SA auch sehr flexibel.
Yogi hat geschrieben:
Ich sehe allerdings dein Problem mit Genshi nicht, an welche Stelle stört dich XML
Ich denke, dass es in meinem Fall besser ist Python Code direkt eingebaut zu haben, da ich so eher so eine Art Browsergame realisieren kann, aber vielleicht irre ich mich da auch.
Mir scheint, du verwechselst da was. Template Engines sollen primär die Präsentation auslagern, Code hat da im reinsten Sinne nichts drin verloren. Und ja, gerade wenn du Websites erstellen willst (sowohl mit XHTML als auch mit XML-gefütterten Flash-Applets) bietet sich Genshi aufgrund der XML-Orientierung an. Mako ist dennoch keine schlechte Wahl. Musst du selbst rausfinden, was dir besser gefällt (und ggf. eben später wechseln, das ist ja keine Schande, im Gegenteil).
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Dann habe ich ja für den Anfang eine vernünftige Basis:

Windows (später Debian) mit CherrPy, PostgreSQL, SQLAlchemy und Mako bzw. Genshi (da werde ich erst einmal das nehmen, wo ich mich wohler fühle und mal sehen).

Einzig was den Ersatz für Twisted betrifft (ist das wirklich overkill und so komplex? ) bin ich mir noch nicht sicher. Kamaelia ist wies aussieht nur für Linux, Allegra blicke ich noch nicht durch, Medusa wurde schon seit 2003 nicht mehr angepackt, und zu asyncore habe ich zumindest ein nettes Tut gefunden (asyncore Tut). Aber wo finde ich was zu der Verwendung der Protokolle UDP und TCP? Ich konnte nicht erkennen, dass die direkt in diesen Paketen unterstützt werden.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Yogi hat geschrieben:Windows (später Debian) mit CherrPy, PostgreSQL, SQLAlchemy und Mako bzw. Genshi (da werde ich erst einmal das nehmen, wo ich mich wohler fühle und mal sehen).
Vor allem bei Mako solltest du dabei achten - und das haben Gerold und Y0Gi schon gemeint - dass du dort so wenig Python-Code wie möglichst einbaust. Das ist auch so schon eine gute Idee, da Templates mit eingebettetem Python-Code in den meisten Editoren absolut ätzend zu bearbeiten ist.
Genshi hat den Nachteil das es langsamer ist und dass es (hauptsächlich) XML ist. Wobei letzteres je nach Anforderungen auch ein Vorteil sein kann. Ich nutze sowohl Genshi als auch andere, nicht-XML-basierte Templatesprachen und bin eigentlich mit beidem Recht zufrieden. Genshi ist besonders anfangs etwas ungewohnt.
Yogi hat geschrieben:Einzig was den Ersatz für Twisted betrifft (ist das wirklich overkill und so komplex? ) bin ich mir noch nicht sicher. Kamaelia ist wies aussieht nur für Linux, Allegra blicke ich noch nicht durch, Medusa wurde schon seit 2003 nicht mehr angepackt, und zu asyncore habe ich zumindest ein nettes Tut gefunden (asyncore Tut). Aber wo finde ich was zu der Verwendung der Protokolle UDP und TCP? Ich konnte nicht erkennen, dass die direkt in diesen Paketen unterstützt werden.
Twisted ist gar nicht so schwer finde ich. Erfordert nur anfangs etwas Einarbeitungszeit, aber das ist es wohl auch Wert. asnycore ist der Teil von Medusa der es in die Stdlib geschafft hat, also solltest du dort mal reingucken. Medusa ist dann "the real thing" und da es nur das Grundgerüst bietet ist es auch nicht mehr nötig dort Sachen zu ändern (aber ich gebe zu, es wird nur von wenigen verwendet, Teils auch weil asyncore schon reicht). Allegra ist eine Art aufgebohrtes Medusa, von einem der gemeint hat Twisted gehe den falschen Weg.

Und die Protokollunterstützung für TCP und UDP (aber noch nicht SCTP *g*) kommt aus dem `sockets` modul. Das ist eine Ebene tiefer und wird von Python bereitgestellt und von allen aufgeführten Modulen im Kern benutzt. Da brauchst du dich auch nicht drum kümmern.

Also wenn ich so etwas machen sollte, würde ich mal sehen was für Anforderungen da sind. Wenn es einfach nur funktionieren soll, dann asyncore. Wenn es hingegen viele Features haben soll und auf einer stabilen Basis stehen soll dann Twisted. Wenn ich neue Wege ausprobieren wollte dann würde ich Kamaelia nehmen (mir persönlich ist Windows-Unterstützung in dem Fall ziemlich egal und auch dann könnte man einen Client für Windows schreiben der asyncore oder Twisted nutzt, wenn die Leistung von kamaelia auf dem Server stimmt).

Wie BlackJack sagte: erwarte nicht dass es beim ersten mal hinhaut. Manchmal ist es nötig Komponenten neu zu schreiben, weil man das inzwischen besser versteht, es neue Möglichkeiten gibt, weil die Wege die man eingeschlagen hat für die Tonne sind oder weil der ursprüngliche Code nicht wartbar ist.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Ok, ich glaube jetzt komme ich erst einmal weiter. Ich muss mir noch überlegen, ob ich mir direkt Twisted antue, oder erst einmal den sanfteren Weg gehe um etwas mehr Übung zu bekommen.

Ihr hab mir schon mal sehr geholfen. Ich halte euch auf den laufenden, auch wenn alles bei mir etwas länger dauert, da ich nur abends nach Kinderjob und total erschöpft arbeiten kann, aber wofür gibt es denn Urlaub ;)
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Ich hab hier wirklich gute Erfahrungen mit Twisted gemacht, und zwar mit dem XMLRPC-Server aus twisted.web

Doku ist Ok, API ist gut und die Leute im IRC sind sehr hilfreich :]

Und vor allem ist es abartig flexibel! :D
Yogi
User
Beiträge: 80
Registriert: Montag 21. Januar 2008, 16:35
Wohnort: Bonner

Round and round and round we go.... warum gibt es in Python immer so viele Möglichkeiten? Ich kann doch nicht erst einmal alles jahrelang durchtesten??
Aber gut, teste ich auch mal an ;) oder haben da schon andere Erfahrungswerte damit??
audax
User
Beiträge: 830
Registriert: Mittwoch 19. Dezember 2007, 10:38

Och, hält sich doch in Grenzen...
Versuch dich mal an Perl. da hat man für jedes kleines Problem min. 10 Bibliotheken zur Auswahl /o\
Antworten