Html-Chat mit Python und Cgi

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.
Antworten
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Guten Abend!

Ich habe heute mal versucht, mich mit der Erstellung eines Html-Chats in Cgi einzuarbeiten. Momentan werden die nötigen Daten über ein Formular beim Drücken des Senden-Buttons an mein Cgi-Script übergeben, das den neuen Text inklusive Benutzername an eine Textdatei anhängt, die Chatlog genannt ist. Das Cgi-Script gibt zudem letztendlich wieder über print die aktualisierte Seite aus.
Doch nun zu meinem Problem: Da die Seite nur beim Absenden des Textes aktualisiert wird, bekommt man nicht mit, falls ein anderer Chat-User eine neue Nachricht gesendet hat, bis man dies ebenfalls tut. Nun habe ich versucht, mit einem kleinen Javascript das Cgi-Script in kurzen Intervallen aufrufen zu lassen, damit der Chatverlauf stets aktuell ist. Doch das ständige erneute Laden der Seite sieht nicht besonders schön aus. Mein Problem ist, dass ich mit Javascript nicht die Chatlog.txt einlesen kann und somit stets das Cgi-Script betätigen muss, welches wiederum nichts in der Seite ändern kann, sondern stets die ganze Seite neu laden muss.

Gibt es eine Möglichkeit, ein Cgi-Script abzubrechen, sodass jedoch nicht eine leere Seite im Browser angezeigt wird, sondern dieser auf der alten Seite bleibt, sofern dem Cgi-Script keine neuen Daten übergeben wurden? Ich weiß durchaus, dass sich für eine solche Aufgabe vielmehr pures Javascript eignen würde, doch ich will versuchen, möglichst viel für Testzwecke in Python zu machen.

Ich bedanke mich einstweilen für euer Interesse und verbleibe mit dankenden Grüßen,

Pythonierer!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Kann es sein, dass du AJAX suchst? Naja, außerdem kanns tdu die Chatlog-Datei durchaus mit JS einlesen, aber besonders schnell wird das bei langen Logs nicht sein, wenn der Log jedes mal wieder eingelesen werden muss.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Leonidas hat geschrieben:Kann es sein, dass du AJAX suchst? Naja, außerdem kanns tdu die Chatlog-Datei durchaus mit JS einlesen, aber besonders schnell wird das bei langen Logs nicht sein, wenn der Log jedes mal wieder eingelesen werden muss.
Hm, das dürfte sich mit Content-Range lösen lassen ;)

Ich würde jedoch die neuen Nachrichten jeweils als JSON vom Server holen. Und auf dem Server jeweils noch ein while no_new_message: sleep() einbauen ;)
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

HTML (egal mit welchen Kniffen) ist eben für solche Echtzeitkommunikation nicht ausgelegt und man handelt sich viele Probleme ein. Das Web 2.0 hat eben auch seine Grenzen.

Wozu also einen Chat über eine Webseite? Ich nutze da viel lieber Stand-alone-Programme. Ok, weniger plattformübergreifend ... aber sonst?
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

CGI ist von der Performance nicht gerade ideal für einen Chat mit AJAX, da muss schon was besseres her.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hyperion hat geschrieben:Ok, weniger plattformübergreifend ... aber sonst?
Ich denke einen IRC-Client findest du auf mehr Platformen als Platformen mit Browser (ahem, brauchbaren Browser).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Hyperion hat geschrieben:HTML (egal mit welchen Kniffen) ist eben für solche Echtzeitkommunikation nicht ausgelegt und man handelt sich viele Probleme ein. Das Web 2.0 hat eben auch seine Grenzen.
HTTP ist hier eher das Problem, nicht HTML.
Hyperion hat geschrieben:Wozu also einen Chat über eine Webseite? Ich nutze da viel lieber Stand-alone-Programme. Ok, weniger plattformübergreifend ... aber sonst?
Ganz einfach: Jeder hat heutzutage einen Webbrowser auf dem internetfähigen Rechner. Und man chattet gewöhnlich auch nur im Internet. Ergo haben schon 100% der Anwender im Prinzip die richtige Anwendung. Download und Installation von zusätzlicher Software ist nicht erforderlich - von Problemen wie Mistrauen, Trojaner-Alarm vom Virenscanner, notwendigen Administratorrechten, dem zur Installation erforderlichen Wissen uvm. ganz abgesehen. Da hättest du doch von selbst drauf kommen müssen ;)

P.S.: Das ganze unter der Voraussetzung, dass man Anwendern leichten Zugang zu einem Chatsystem geben möchte. IRC sollte man praktischerweise nicht neu erfinden.
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Hallo,

erstmal will ich euch für die vielen Antworten und damit eröffneten Möglichkeiten danken sowie mich für meine lange Zeit ausbleibende Antwort entschuldigen, doch ich hatte ein wenig Stress in der Schule.

Als erstes würde mich interessieren, wie ich rein theoretisch mit Javascript eine Textdatei auslesen könnte, da ich zu diesem Thema über Google stets nur die Antwort erhielt, dass dies bloß über Java, nicht jedoch Javascript, möglich sei.
Des weiteren muss ich sagen, dass gerade Ajax mein Interesse auf sich gezogen hat, doch auch der Vorschlag mit Json klingt vielversprechend.
Zu den Diskussionen um den Sinn eines Chats im Browser wollte ich noch sagen, dass dies wie gesagt vor allem dem Einstudieren von Cgi dienen sollte und höchstens für einen kleinen Hilfschat bzw. ein Guestbook (bei welchem ich jedoch den Aktualisierungsfaktor vernachlässigen kann) gedacht war.

Wie dem auch sei, ich freue mich jedenfalls auf eine Antwort nach dem Einlesen von Textdateien mit Javascript und verbleibe mit freundlichen Grüßen,

Pythonierer!
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Y0Gi hat geschrieben:
Hyperion hat geschrieben:HTML (egal mit welchen Kniffen) ist eben für solche Echtzeitkommunikation nicht ausgelegt und man handelt sich viele Probleme ein. Das Web 2.0 hat eben auch seine Grenzen.
HTTP ist hier eher das Problem, nicht HTML.
Hm ... ok, sagen wir beides ;) Klar macht es ein zustandsloses Protokoll nicht gerade leichter, aber HTML an sich ist eben auch nicht ideal, da die "GUI" bei jeder Änderung neu interpretiert werden muss.
Hyperion hat geschrieben:Wozu also einen Chat über eine Webseite? Ich nutze da viel lieber Stand-alone-Programme. Ok, weniger plattformübergreifend ... aber sonst?
Ganz einfach: Jeder hat heutzutage einen Webbrowser auf dem internetfähigen Rechner. Und man chattet gewöhnlich auch nur im Internet. Ergo haben schon 100% der Anwender im Prinzip die richtige Anwendung. Download und Installation von zusätzlicher Software ist nicht erforderlich - von Problemen wie Mistrauen, Trojaner-Alarm vom Virenscanner, notwendigen Administratorrechten, dem zur Installation erforderlichen Wissen uvm. ganz abgesehen. Da hättest du doch von selbst drauf kommen müssen ;)
Sicher - wobei das Internet ja nichts mit HTML zu tun hat ;) Auch IRC hat ja sein Hauptanwendungsgebiet im Internet! Insofern wäre da wohl ein IRC-Client auf Java-Basis die erste Wahl. (Und davon gibts sicher schon genug!)

Naja, da es sich eh um eine akademische Aufgabe handelt, ist diese Diskussion wohl eh müßig :D
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Wie gesagt, vom Anwenderkomfort - und die will man, gerade wenn es Kunden sind und es um Geld geht, keinesfalls verschrecken oder ausschließen - ist ein webbasierter Chat gegenüber separater Software unschlagbar.


Da HTML einen live manipulierbaren DOM-Baum hat, sehe ich da (sofern JavaScript benutzt wird) kein großes Problem darin, HTML für die Oberfläche zu verwenden.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Y0Gi hat geschrieben:Wie gesagt, vom Anwenderkomfort - und die will man, gerade wenn es Kunden sind und es um Geld geht, keinesfalls verschrecken oder ausschließen - ist ein webbasierter Chat gegenüber separater Software unschlagbar.
Kommt drauf an, wie man "Komfort" definiert! Ich liebe native GUIs und mag HTML-Forms nun mal nicht. Diese bieten für mich kein gutes Look-and-feel. Also wäre es für mich unkomfortabel. Wenn man es vom Standpunkt der Installation her sieht, hast Du sicherlich recht!
Da HTML einen live manipulierbaren DOM-Baum hat, sehe ich da (sofern JavaScript benutzt wird) kein großes Problem darin, HTML für die Oberfläche zu verwenden.
Sicher. Aber bei größeren Seiten dauert das Rendering nun mal ... bei einem separaten Chat-Fenster, ist das sicher ein geringeres Problem!
Benutzeravatar
veers
User
Beiträge: 1219
Registriert: Mittwoch 28. Februar 2007, 20:01
Wohnort: Zürich (CH)
Kontaktdaten:

Hyperion hat geschrieben:Sicher. Aber bei größeren Seiten dauert das Rendering nun mal ... bei einem separaten Chat-Fenster, ist das sicher ein geringeres Problem!
Ja, da gibt es dann aber auch wieder Hacks mit innerHTML mit denen alles relativ schnell geht ;) Aber ich glaube es wird langsam Offtopic.
[url=http://29a.ch/]My Website - 29a.ch[/url]
"If privacy is outlawed, only outlaws will have privacy." - Phil Zimmermann
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Entschuldigt mich, wenn ich eure hitzige Diskussion über den (Un-)Sinn eines Browser-Chats unterbreche, aber ich hätte doch noch gerne gewusst, wie ich denn jetzt eine Textdatei mit Javascript einlesen und diese dann in einem Text in Html ausgeben kann?

Da dies wahrscheinlich die letzte Antwort sein wird, bedanke ich mich schon mal im Voraus, dann muss ich dies nicht noch einmal in einem ansonsten inhaltslosen Post machen.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Pythonierer hat geschrieben:Da dies wahrscheinlich die letzte Antwort sein wird, bedanke ich mich schon mal im Voraus, dann muss ich dies nicht noch einmal in einem ansonsten inhaltslosen Post machen.
Hallo Pythonierer!

Heißt das jetzt, dass du nicht antworten wirst? Also ich freue mich immer wenn sich jemand nach einer Antwort bedankt. :roll:

Also, du nimmst jQuery http://jquery.com/ und liest dich in die Tutorials ein. Dann suchst du dort nach der Kategorie "Ajax" http://docs.jquery.com/Category:Ajax und liest dich dort auch noch ein wenig durch. Sehr interessant ist noch dieser Artikel: http://www-128.ibm.com/developerworks/l ... query.html
Die jQuery-Ajax-Api ist hier dokumentiert: http://docs.jquery.com/Ajax

Die Serverseite muss einfach nur XML, HTML, JSON oder TEXT zurück liefern. HTML oder TEXT kann man z.B. direkt an ein DOM-Objekt zum Anzeigen übergeben.

Die Serverseite kann z.B. ein Python XMLRPC-Server http://www.python-forum.de/topic-5478.html sein. Oder wenn du CherryPy http://www.cherrypy.org/ für deine Website (statt CGI) http://halvar.at/python/cherrypy_cheetah/ verwendest, dann könntest du auch aus CherryPy heraus XMLRPC Anfragen beantworten. http://www.python-forum.de/post-70912.html#70912 (siehe zweites Beispielskript)

Wenn dir der Leidensdruck mit CGI noch nicht zu groß ist, dann kannst du XMLRPC auch aus CGI heraus verwenden. Das funktioniert mit dem xmlrpclib-Modul. Die Methode ``dumps`` http://docs.python.org/lib/node658.html kann zum Antworten auf eine XMLRPC-Frage herangezogen werden.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Pythonierer
User
Beiträge: 41
Registriert: Samstag 13. Januar 2007, 15:26

Guten Tag!

Ich will mich ja gleich mal ganz brav entschuldigen, dass ich mein Dankeschön bereits im Voraus gab, ich dachte nur, ihr würdet Posts, die keinen "wirklichen" Inhalt haben, nicht so gerne sehen. :oops:

Dies war jedoch keinesfalls böse oder undankbar gemeint, ich bin ehrlich gesagt froh, dass ihr meinen Dank gerne annehmt.
Also vielen, vielen Dank für die zahlreichen Posts!

Ich werde mich bestimmt noch ein nächster Zeit mit jQuery, Ajax und/oder CherryPy beschäftigen, jedoch fehlt mir derzeit dazu die Zeit. Daher wollte ich eigentlich nur wissen, wie man nun mit Javascript ganz simpel eine Textdatei ausliest. Falls dies ohne Ajax, jQuery, CherryPy o.a. nicht geht, so ist es auch nicht so schlimm, da der Chat ja wie gesagt nur als Cgi-Intro dienen sollte.

Also nochmals vielen Dank und noch einen schönen Tag,

Pythonierer!
Antworten