Connection zu CGI Skript offen halten?
Hans-Peter
- programmiertechnik
1 Christian Kruse0 opi
Hallo
Normalerweise sende ich Daten an ein CGI Skript. Dieses wird gestartet und verarbeitet mir dir Daten. Schlussendlich gibt dann das CGI Skript Daten an den Browser zurueck und wird beendet.
Nun moechte ich jedoch folgendes bewerkstelligen. Ich moechte eine Connection zu einem CGI Skript oeffnen und diese auch offen halten! Mein Ziel ist es nun, dass auch mein Server zu einem beliebigen Zeitpunkt ueber diese Connection an meinen Browser Daten schicken kann. Ist sowas moeglich zu realisieren? Kann mir hierzu vielleicht jemand Ressourcen empfehlen wie sowas realisiert werden kann? Order sind fuer eine solche Aufgabe andere Techniken vorgesehen?
Danke fuer hilfreiche Kommentare!
HP
你好 Hans,
Nun moechte ich jedoch folgendes bewerkstelligen. Ich moechte eine
Connection zu einem CGI Skript oeffnen und diese auch offen halten!
Mein Ziel ist es nun, dass auch mein Server zu einem beliebigen
Zeitpunkt ueber diese Connection an meinen Browser Daten schicken kann.
Ist sowas moeglich zu realisieren?
Nein, es ist nicht möglich. Bzw. möglich ist alles, aber der Sinn sei
dahingestellt.
Kann mir hierzu vielleicht jemand Ressourcen empfehlen wie sowas
realisiert werden kann? Order sind fuer eine solche Aufgabe andere
Techniken vorgesehen?
Für eine solche Aufgabe benötigst du ein anderes, verbindungs-orientiertes
Protokoll. HTTP ist Request-basierend, das ist dafür nicht geeignet. Du
könntest z. B. einen Dämon bauen und den auf einem bestimmten TCP/IP-Port
horchen lassen. Dein Client-Programm kann sich nun jederzeit zu diesem
Dämon verbinden und mit ihm über ein von dir festgelegtes (und vielleicht
sogar entworfenes) Protokoll kommunizieren.
再见,
克里斯蒂安
Kann mir hierzu vielleicht jemand Ressourcen empfehlen wie sowas
realisiert werden kann? Order sind fuer eine solche Aufgabe andere
Techniken vorgesehen?Für eine solche Aufgabe benötigst du ein anderes, verbindungs-orientiertes
Protokoll. HTTP ist Request-basierend, das ist dafür nicht geeignet. Du
könntest z. B. einen Dämon bauen und den auf einem bestimmten TCP/IP-Port
horchen lassen. Dein Client-Programm kann sich nun jederzeit zu diesem
Dämon verbinden und mit ihm über ein von dir festgelegtes (und vielleicht
sogar entworfenes) Protokoll kommunizieren.
Danke fuer Deine Antwort. Haettest du vielleicht eine gute online Ressource wo erklaert wird wie man so ein Problem loesen kann? D.h. hier komme ich mit so einfach Sachen wie Javascript nicht mehr aus! Muss hier auf Java zurueckgreifen sehe ich das richtig?
Bin fuer jeden Tip dankbar
Gruss Hans Peter
PS: Laut http://www.contentmanager.de/magazin/artikel_553_das_hypertext_transfer_protocol.html
kann eine HTTP Verbindung doch auch offen gehalten werden, bis sie explizit geschlossen wird.
Ich zitiere:
GET / HTTP 1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, */*
Accept-Language: en-us
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.01; Windows NT)
Host: mydomain.docuverse.de
Connection: Keep-Alive
Die erste Zeile des Requests fordert vom Server ein Dokument an, das im Pfad / liegt. HTTP/1.1 wird als die Version des Protokolls angegeben, die der Browser verwendet. Die folgenden so genannten Header informieren den Server darüber, welche Art von Dokumenten vom Client akzeptiert werden, welche Sprache bevorzugt wird und welche serverseitigen Komprimierungen vom Browser wieder dekomprimiert werden können. Es folgt eine "Selbstauskunft" des Browsers und eine Angabe über den Hostname des Clients, die bei HTTP 1.1 Pflicht ist. Da der Server mehrere Hostnamen besitzen kann, gibt der Client hier an, welcher Hostname gemeint ist. Der Request wird abgeschlossen durch einen Connection-Header, der angibt, dass die TCP-Verbindung offen gehalten werden soll, bis der Abbau explizit gefordert wird.
你好 Hans,
PS: Laut http://www.contentmanager.de/magazin/artikel_553_das_hypertext_transfer_protocol.html
kann eine HTTP Verbindung doch auch offen gehalten werden, bis sie
explizit geschlossen wird.
Prinzipiell ist das richtig. Aber das CGI-Script kann trotzdem nicht
einfach senden, wann es lustig ist. Entweder, es muss ein
Content-Length-Header angegeben werden (in dem Fall ist genau definiert,
wieviel du senden darfst) oder es wird Transfer-Encoding: chunked benutzt
oder es kann kein Connect: keep-alive verwendet werden.
Bei Transfer-Encoding: chunked ist zwar nicht genau definiert, wieviel du
senden willst, aber dafür schlägt der Server dein Script nach einer
definierten Zeit tot oder der Browser trennt die Verbindung, weil sie
denken, dass das Script sich aufgehangen hat. HTTP ist eben ein
Request-orientiertes Protokoll. Für solche Aufgaben einfach nicht geeignet.
再见,
克里斯蒂安
Hallo Hans-Peter,
ich weiß leider nicht, was genau du realisieren möchtest, aber
vielleicht könnte auch FastCGI, mod_perl, mod_php oder ähnliches
in Kombination mit einem Cookie und einem http-equiv="refresh"
eine Lösung für dich sein.
Greez,
opi