Bild und Text auf Webseite dynamisch anzeigen

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

oh mann, sorry ich meine javaSCRIPT (ich lerns nie)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Py_lo!

HTTP ist ein zustandsloses Protokoll. Der Browser baut immer wieder eine neue Verbindung auf. Das bedeutet, dass du damit arbeiten musst, dass immer nur vom Browser aus die Initiative zur Kommunikation ergriffen wird. Der Server wird/kann keine Verbindung zum Browser starten.

Du kannst eine JavaScript-Funktion mit ``window.setInterval()`` immer wieder aufrufen. Dieses JavaScript kann dann beim Server nachfragen, ob es etwas Neues gibt. So etwas nennt man "pollen". http://de.selfhtml.org/javascript/objek ... t_interval

Du kannst bei solchen Aktionen auch JavaScript-Quelltext vom Server zurück geben lassen. Nimmst du dafür ``jQuery.getScript()``, dann wird das zurück gegebene JavaScript sofort auf dem Browser ausgeführt. http://docs.jquery.com/Ajax/jQuery.getScript

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Hallo Gerold,

ich nutze bereits 'window.setInterval()' jedoch dachte ich es müsse doch einen weg geben... hatte aber auch noch nichts gefunden.
Zwar kenne ich jetzt mehere Möglichkeiten Javascript in Python auszuführen - jedoch passiert das ja alles Serverseitig.

Das einzige was ich noch gefunden habe ist Cometd:
Cometd is a scalable HTTP-based event routing bus that uses a Ajax Push technology pattern known as Comet. The term 'Comet' was coined by Alex Russell in his post Comet: Low Latency Data for the Browser.
Danke erstmal, ich werde weitersuchen... (polling is doof!)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

py_lo hat geschrieben:(polling is doof!)
Hallo py_lo!

Na und? Dann setzt du halt jede Sekunde einen Request ab. Das belastet weder den Browser, noch den Server in irgend einer weise spürbar. Außer, du entwickelst eine Webanwendung für hunderte oder tausende Benutzer.

Aber auch da kannst du auf dem Server das Ergebnis der Anfrage für eine oder mehrere Sekunden zwischenspeichern (caching). Die tausend Requests die Sekunde, beantwortest du dann aus dem Cache/Speicher.

Mach' dir da mal keine zu großen Sorgen wegen dieser Kleinigkeit.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Okay, für hunderte Benutzer isses nicht... eher so für 10-15 - wie sehr es zu vernachlässigen ist werd ich dann mal testen.
Der Server ist ein kleines embedded-Board... da kommt es schonmal auf ein
paar % Leistung an.

So wollte ich einfach unnötige anfragen vermeiden.
Aber vielleicht hast du recht und ich mache mir um solch eine Sache zuviel
Gedanken, vom "Gefühl" her ist es halt unschön.

Werde berichten
:wink:

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

Ich verweise auf meinen Post von der vorherigen Seite: Divmod Nevow existiert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Soderle.... es ist schon ein wenig her aber ich hab ja gesagt ich werde
berichten. Außerdem hab ich schon wieder ein Problem *arrrh*

Also das Polling ist in der Tat nicht so schlimm wie ich gedacht habe bei
ca. 10PC's, die jede sekunde anfragen steigt die CPU-Last um ca. 5-6%
(Geode LX800 CPU) wobei ich einige Dinge durch caching sicherlich noch
optimieren könnte.

Nunja die Web-Anwendung ist nun stetig gewachsen und so habe ich
beschlossen auch mal CherryPy und Cheetah auf den neuesten Stand
zu bringen.
(CherryPy 3.1.2 und Cheetah-2.4.2.1)

Bei CherryPy war es kein Problem, seit der neuen Version von Cheetah
wird mir im Browser allerdings nur folgender Fehler angezeigt:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/site-packages/cherrypy/_cprequest.py", line 606, in respond
cherrypy.response.body = self.handler()
File "/usr/local/lib/python2.7/site-packages/cherrypy/_cpdispatch.py", line 25, in __call__
return self.callable(*self.args, **self.kwargs)
File "ajaxtest_server.py", line 131, in index
return unicode(template)
File "/usr/local/lib/python2.7/site-packages/Cheetah/Template.py", line 1010, in __unicode__
return getattr(self, mainMethName)()
TypeError: unbound method respond() must be called with media_HDD_Server_index_tmpl instance as first argument (got nothing instead)
Das passiert auch beim einfachen "Grundbeispiel" von Gerold
(ajaxtest_v2.zip)

Allerdings sagt mir der Fehler igendwie wenig bis garnichts...
Die entsprechende Stelle im Python-Script wäre:

Code: Alles auswählen

class Root(object):

    def index(self, *args, **kwargs):
        template = Template(file = os.path.join(THISDIR, "index.tmpl"))
        return unicode(template)
    index.exposed = True
Vielleicht hat ja jmd eine Idee... sonst muss eben die alte
Version wieder ran - die läuft.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo py_lo!

Sorry, in das Beispiel hat sich ein Fehler eingeschlichen.

In der Vorlage muss man das Encoding anders angeben -- nämlich so (ohne Istgleich-Zeichen):

Code: Alles auswählen

#encoding utf-8
Ich nehme mal an, dass du UTF-8 verwendest, da du nicht auf einem Windows-System bist.

Ob das jetzt der Grund für deinen Fehler ist, weiß ich noch nicht. Aber es ist auf jeden Fall ein Problem, sobald du Umlaute verwendest.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Hi gerold!,

dieser seltsame Fehler muss woanders dran liegen, das mit dem
encoding ist es wohl auf jeden Fall nicht - ich hatte die .tmpl eh kompl.
neu erstellt -ohne fehler- :wink:

Falls Du noch eine andere Idee hast, lass es mich bitte wissen :mrgreen:
Ich werd auch noch ein wenig rumprobieren....

viele Grüße
Normann
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo Normann!

Lösche die Ordner "cherrypy" und "Cheetah" aus dem Beispielordner. Installiere CherryPy und Cheetah mit "easy_install".

Und ob Cheetah mit Python 2.7 kann, weiß ich auch nicht. Python 2.7 ist ja nicht unbedingt Standard. Probiere es mal mit Python 2.6. Vielleicht liegt es daran.

Ich habe Cheetah 2.4.2.1 unter Python 2.6 am Laufen. Ich kann deinen Fehler nicht nachvollziehen. Deshalb schließe ich auf ein Problem, welches nichts mit dem Programm zu tun hat, sondern eher mit der Installation von Cheetah.

Du schriebst, dass es auch mit meinem Beispielprogrämmchen nicht funktioniert. --> Lösche (wie oben beschrieben), unbedingt die Cheetah- und Cherrypy-Ordner aus dem Beispiel raus und installiere Cheetah und Cherrypy ganz normal.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
py_lo
User
Beiträge: 60
Registriert: Freitag 20. März 2009, 09:12

Hallo Gerold,

aaalso.. den Cheetah und Cherrypy Ordner hatte ich nicht gelöscht sondern
einfach nur umbenannt aber das ist ja egal.

Easy_install funktioniert leider nicht mit Python2.7 wird nur bis 2.6
unterstützt.
Habe manuell die Installation gelöscht und versucht Cheetah neu
zu installieren, zumindest dabei gab es keinen offensichtlichen Fehler.

Beim ausführen von: #cheetah test
gab es dann jedoch etliche Fehler.
Also liegst Du mit der Vermutung der fehlerhaften installation schon ganz richtig denke ich.

Allerding möchte ich nicht zurück zu 2.6 wechseln, da ich für 2.7 alle Module manuell installiert habe - und das hat viel Zeit gekostet.
Geht vielleicht ja auch parallel, aber das ist mir zu viel Risiko.

Der Cheetah-Ordner aus Deinem Beispiel beinhaltet ja version 2.2.2 -
und DIE läuft ja ohne Probleme mit python2.7

Meine Idee wäre es vielleicht zu versuchen einfach den Cheetah Ordner
aus Deiner aktuellen Installation zu nehmen um zu gucken ob es dann
läuft - wenn Du denn so nett wärst mir diesen zu Verfügung zu stellen.

Kann mir nicht vorstellen das v.2.2.2 inkompatibel mit 2.4.2 ist.

Wenn alles nichts hilft bleibe ich halt bei der älteren version, dachte das
problem sei etwas einfacherer natur.

viele Grüße
Normann
Antworten