Dynamische Webseite ohne Java und Flash-Player
-
Hallo! Gibt es eine Möglichkeit den Browser(Client) von Server(Webserver) aus über ein Ereignis zu informieren? Theoretisch, habe ich mir überlegt, die webseite immer automatisch aktualisieren zu lassen (wenns geht [poling?]).
-
JavaScript
-
Ja, wie denn? Polling? Also webseite automatisch aktualisieren?
-
ajax request
-
neoexpert schrieb:
Hallo! Gibt es eine Möglichkeit den Browser(Client) von Server(Webserver) aus über ein Ereignis zu informieren?
Der Client muss schon beim Server anfragen. Wäre ja schlimm, wenn jeder Hacker nen Server hinstellen könnte und dann Browser steuern kann.
-
reverse ajax wäre das Stichwort. Ich habe das gerade neulich mal ausprobiert.
-
Ich vertehe nicht, erklär mal kurz. Eine andere Mölichkeit über die ich nachgedacht habe: der Server kann ja beim senden der webseite auch mal pausen machen. Dann bleibt im browser der ladebalken stehen. Wie lange versucht der Browser die verbundung beizubehalten? Wenn die verbindung nicht getrennt wird, wäre das ja die lösung oder?
-
neoexpert schrieb:
Ich vertehe nicht, erklär mal kurz. Eine andere Mölichkeit über die ich nachgedacht habe: der Server kann ja beim senden der webseite auch mal pausen machen. Dann bleibt im browser der ladebalken stehen. Wie lange versucht der Browser die verbundung beizubehalten? Wenn die verbindung nicht getrennt wird, wäre das ja die lösung oder?
Ich glaube zwar nicht, dass ich das hier schnell mal besser erklären kann, als der Wikipedia-Artikel oder eine Suche über eine geeignete Internet Suchmaschine nach diesem Begriff, aber ich versuche es mal.
Das Problem ist zunächst einmal, dass der Webserver dem Browser nur was sagen kann, wenn er gefragt wird.
Die Lösung ist, dass der Browser im Hintergrund eine Anfrage los schickt und der Server diese Anfrage einfach offen hält. Sobald der Server dem Browser was mitteilen möchte, kann er diese Anfrage beantworten.
Natürlich wird der Browser nicht ewig auf eine Antwort warten. Daher hat der Server einen Timeout von beispielsweise 60 Sekunden, nach dem er die Anfrage zwangsweise mit der Mitteilung beendet, dass sich nichts getan hat. Der Browser schickt daraufhin unmittelbar die nächste Anfrage, so dass immer eine Anfrage offen ist.
Man muss natürlich berücksichtigen, dass der Server möglicherweise genau zwischen diesen beiden Requests etwas schicken möchte. Das kann er da nicht machen.
Ich habe das gelöst, indem ich ein Datenelement mit einer Seriennummer versehen habe. Ändert sich das Datenelement, wird diese Seriennummer erhöht. Der Browser schickt mit dem Request seine letzte bekannte Seriennummer. Ist diese kleiner, als die Serverseitige, kann der Request unmittelbar beantwortet werden. Sind die Seriennummern gleich, wartet der Request blockierend mit timeout auf eine Änderung.
Ein technisches Problem bei der Serverseitigen Implementierung ist sicher dieses blockierende warten auf eine Änderung. Ausserdem muss natürlich eine asynchrone Änderung Serverseitig initiiert werden können.
Bei meinen Experimenten habe ich natürlich tntnet verwendet, der Multithreaded arbeitet. Da kann ich einfach eine globale Variable und eine Condition definieren, auf die mit einem timed-wait gewartet wird. Beides ist für alle Threads auf dem Server sichtbar. Die Condition wird bei bedarf signalisiert, was die wartenden Requests weckt.
-
aha, cool, dankeschön
-
So ich habe jetzt eben einen webserver in c++ geschrieben. Das läuft aber nicht so wie erwartet. Firefox wartet bis die verbindung geschlossen wird, erst dann zeigt er die webseite. Ist das ein richtiges verhalten? Kann man das irgendwie umgehen? Allerdings kann der server die verbindung zu jedem zeitpunkt schliessen, in diesem moment stellt firefox die webseite dar. dies kann man auch als benachrichtigung über ein erreignis von dem server sehen. Was denkt ihr?