![]() |
WebSite von Server zum Client "pushen" (CGI Script
Hi @ all!
Ich hab ein Problem: Ich möchte gerne eine Seite zum Client senden obwohl kein Request erfolgt ist. D.h. der Client sendet schon ein Request zur Datenbankabfrage zum Server. Diese dauert u.Umständen aber sehr lang, und in dieser Zeit soll zum Client ein Seite mit Sanduhr oder ähnlichem gesendet werden, bis DB Abfrage fertig ist. Kennt sich da jemand aus? thanx, tini :spin: |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Moin tini,
ich hab' jetzt zwar schon länger kein CGI Programm mehr erstellt, aber wer hindert Dich daran, statt der Seite mit den angeforderten Daten erst einmal eine "Bitte warten" Seite abzuschicken, und später dann die mit den Daten. |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Zitat:
Das versteh ich nicht: Du willst einem HTTP-Clienten etwas schicken, obwohl der gar nichts von dir will? Das wird der Client nie verarbeiten, außerdem, woher weißt du dessen IP? Ich glaub, ich versteh dein Problem nicht ganz :cry: |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Das geht, ganz sicher, ich habe einen Chat, der macht genau das: der reloaded nicht immer so, wie es die normalen tun, sondern sendet erst an die User einen Befehl zum reloaden, wenn wirklich Daten da sind!
|
Re: WebSite von Server zum Client "pushen" (CGI Sc
Moin Chewie,
Zitat:
|
Re: WebSite von Server zum Client "pushen" (CGI Sc
Tut mir leid, jetzt versteh ich gar nix mehr.
Ein Webserver schickt soll einem Client eine Seite senden, obwohl der Client keine Anfrage geschickt hat. Nun wurde aber doch eine Anfrage geschickt :shock: Na ja, solange du es verstehst, Chris, iss ja alles gut :nerd: |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Moin Chewie,
ein Client ruft ein CGI Programm aufgerufen, dass Daten aus einer Datenbank abfragt, und diese dann, vermutlich aufbereitet, in Form einer HTML Datei an den Client zurückschickt. Da diese Datenbankabfrage wohl etwas dauern kann möchte tini nun wissen, ob man zwischendurch auch eine andere HTML Datei zurückschicken kann. Soweit das, was ich aus tinis Frage heraus verstanden habe. Na ja, meine Antwort dazu steht ja schon da ;-) |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Hi!
Christian schreibt: Zitat:
oder über <head><meta http-equiv="expires"...> im html Teil? @Chewie: Die IP Adresse des Clients bekomm ich ohne weiteres durch das CGI Script. Zb:
Delphi-Quellcode:
Und wie Christian schont schrieb, möchte ich, da die Datenbankanfrage länger dauert, eine "Bitte Warten" Seite "einschieben", bis das Ergebnis da ist-sonst denkt der User, das Programm hat sich aufgehängt oder so.
IP:= Request.RemoteAddr;
mfg tini :spin: |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Soweit mir bekannt ist, gibt es keine möglichkeit, das übers "pushen" zu lösen...
Viele Seiten die scheinbar so was machen, realisieren das über einen Trick: Es wird eine halbe Seite zum Client gestreamt, mit einem Layer (in dhtml) z.B. der Anzeigt "Bitte warten - Daten werden sortiert". Der Server (bzw. das CGI-Script darf dabei aber die Verbindung zum Client nicht beenden. Wenn die langwierige Verarbeitung auf dem Server abgeschlossen ist, gibt das CGI-Script zunächst etwas JavaScript aus, das den "Bitte warten..."-Layer abschaltet und danach die restliche Seite ausgibt. Im Moment habe ich dazu kein konkretes Beispiel an der Hand, aber mit ein bisschen gesuche... *g* Gruß Wormid |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Ein kleines Beispiel zu meinem Denkansatz aus einem Usercomment in der PHP-Dokumentation...
Schritt 1, vor der langwierigen Datenbankoperation: Zitat:
Zitat:
Gruß Wormid |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Also auf die Lösung mit den Layern bin ich auch schon gestoßen.
Ist nur die Frage, wie ich das mit der html seite mache (ausleitende tags...</body></html> etc.). Bevor die Seite abgeschlossen wird, müsste ich ja dann erstmal die Abfrage starten, und danach dann das Ergebnis und abschließende Tags der html seite zum client senden! Ist das funtkionsfähig? mfg tini |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Die abschliessenden Tags dürfen natürlich noch nicht übertragen werden.
Es müsste in etwa so aussehen:
Code:
An dieser Stelle muss das Script den Ausgabebuffer an den Client senden und dann die zeitintensive Aktion starten. Sobald die durch ist, müsste es mit der Ausgabe so ungefähr weitergehen...
<html>
<head> ... </head> <body> ... <span id="processing">Bin am Verarbeiten am tun dranne... ;-)</span>
Code:
<script>processing.style.display = "none"</script>
... Lorem ipsum... etc... </body> </html> |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Solange aber keine ausleitenden Tags vorhanden sind kann man sich aber nicht darauf verlassen, dass die Seite überhaupt schon angezeigt wird!
Warum machst du nicht einfach eine Zwischenseite: Ausgangsseite | Zwischenseite (Bitte warten) -> Request an DB-Funktion | Ergebnisseite Jetzt könnte es passieren, dass die Seite von der DB-Applikation als "noch leere" Seite die bitte warten Seite wegbügelt, das kannst Du aber verhindern, indem Du die Seite erst anzeigst, wenn sie vollständig geladen ist. das geht z.B. mit folgender Zeile im Head der Ergebnisseite:
Code:
P.S.: Push kannst Du Gott sei Dank vergessen, sonst könnte Dir z.B. jeder jede beliebige Datei ungefragt auf deinen Rechner senden ;)
<META HTTP-EQUIV="Page-Enter" CONTENT="revealTrans(Duration=0.6,Transition=12)">
|
Re: WebSite von Server zum Client "pushen" (CGI Sc
Wie wärs mit einem Meta-Refresh?
Du schreibst hin "Bitte Warten", und in den Meta-Tag fügst du einen Meta-Refresh ein, der sofort mit der zeitintensiven Aktion beginnt. Erst wenn sie fertig ist, wird die nächste Seite geladen. Dieses Verfahren wird z.B. von einigen Webmailclienten benutzt. Edit: OK, ich sehe, das ist FriFras Vorschlag, aber ich hab noch dazu geschrieben, wie der HTML-Tag dazu heißt ;-) |
Re: WebSite von Server zum Client "pushen" (CGI Sc
@Chewie: Das ist ja mein Beispiel "auf Links gedreht" ;) ...
|
Re: WebSite von Server zum Client "pushen" (CGI Sc
Hi!!!
Danke für Eure Hilfe! Also das mit
Delphi-Quellcode:
habe ich probiert.
<META HTTP-EQUIV="Page-Enter" CONTENT="revealTrans(Duration=0.6,Transition=12)">
Aber es funktioniert nicht. :( Ich glaube es liegt daran, dass der Server die .exe erst komplett ausführt, und danach die Verbindung zum Client wieder aufbaut und das Ergebnis bzw. die Ergebnisseite übermittelt (es werden nämlich auch "Bitte warten..." Seite und "Ergebnisseite" erst nach der DB-Abfrage auf EINER Seite dem Client zugestellt, trotz jeweiliger ausleitender tags der einzelnene Seiten). Nun fragt sich, wie man die Verbindung zum Client schon vorher wieder herstellen kann... (nur die IP Adresse wird da nicht langen...) und die "Bitte warten" Seite schon eher versendet(also vor db abfrage und bevor .exe Datei beendet. mfg tini :spin: |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Nochmal, ich würde folgendermaßen vorgehen:
Situation: Der Client will was von dir (Webserver), was etwas länger dauern wird. 1. Du schickst ihm eine Seite, auf der "Bitte warten" (oder so was ähnliches) steht 2. Diese Seite enthält einen Meta-Refresh (mit Intervall 0 Sekunden), der das Script lädt, das die Aktion durchführen wird 3. Du sendest erst wieder Daten an den Client, wenn deine Berechnung ganz abgeschlossen ist 4. Der Client hat jetzt die Bitte-Warten-Seite auf dem Bildschirm, bis deine Berechnung fertig ist und er die neue Seite fertig laden kann. |
Re: WebSite von Server zum Client "pushen" (CGI Sc
Hallo!
Merci an Euch!! Jetzt klappt's wunderbar!!! mfg tini :spin: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:15 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz