Daten werden gesendet, sobald eine URL angefordert wird

8

Gegeben, wenn ein Benutzer /foo auf meinem Server anfordert, sende ich die folgende HTTP-Antwort (die Verbindung wird nicht geschlossen):

%Vor%

Wenn der Benutzer zu /bar geht (was 204 No Content sendet, damit sich die Ansicht nicht ändert), möchte ich die folgenden Daten in der ersten Antwort senden.

%Vor%

Wie bekomme ich die zweite Anfrage, um dies aus der ersten Antwort auszulösen? Ich plane, möglicherweise eine Phantasie [Motoren, die multipart / x-mixed-ersetzen (derzeit nur Gecko)] zu unterstützen - nur E-Mail-Webapp, die Server-Push-und Ajax-Effekte ohne JavaScript, nur zum Spaß macht.

    
Eli Grey 05.04.2010, 02:58
quelle

4 Antworten

1

Keine vollständige Antwort, aber:

In Ihrer Frage beschreiben Sie eine Comet -Stil-Architektur. Was die Unterstützung von Kometen-Stil-Techniken in Python / WSGI betrifft, gibt es eine StackOverflow-Frage , die über verschiedene Themen spricht Python-Server mit Unterstützung für lang andauernde Anfragen a la Comet.

Interessant ist auch dieser Mail-Thread in der Python-Web-SIG: "Könnte WSGI verarbeiten Asynchrone Antwort? ". Im Mai 2008 gab es in der Web-SIG eine breite Diskussion über das Thema asynchrone Anfragen in WSGI .

Eine neuere Entwicklung ist evserver , ein einfacher WSGI-Server, der das Asynchrone WSGI-Erweiterung vorgeschlagen von Christopher Stawarz in der Web-SIG im Mai 2008.

Schließlich unterstützt der Tornado-Webserver nicht blockierende asynchrone Anfragen . Es hat eine Chat-Beispielanwendung, die lange Abfragen verwendet und Ähnlichkeiten mit Ihren Anforderungen aufweist.

    
flight 20.04.2010, 14:23
quelle
1

Wenn das Problem darin besteht, einen Befehl von der / bar-Anwendung an die / foo-Anwendung zu übergeben und einen Servlet-ähnlichen Ansatz zu verwenden (der Python-Code wird einmal und nicht für jede Anfrage wie in CGI geladen), können Sie einige ändern Klasseneigenschaft der Anwendung / foo und bereit sein, auf die Änderung in der / foo-Instanz zu reagieren (indem der Eigenschaftsstatus überprüft wird).

Offensichtlich sollte die / foo-Anwendung nicht direkt nach der ersten Anfrage zurückkehren und den Inhalt zeilenweise ausgeben.

Dachte, das ist nur Theorie, ich habe das selbst nicht versucht.

    
newtover 05.04.2010 08:50
quelle
1

Ich habe ein kleines Beispiel erstellt (nur zum Spaß, wisst ihr:))

%Vor%

Die Idee einer geteilten Variablen- und Thread-Synchronisation (unter Verwendung eines Zustandsvariablenobjekts) basiert auf der Tatsache, dass der von CherryPyWSGIServer bereitgestellte WSGI-Server mit einem Thread versehen ist.

    
Messa 20.04.2010 15:16
quelle
-1

Nicht sicher, ob das genau das ist, wonach du suchst, aber es gibt eine ziemlich alte Art, Server Push mit einem Pantomime-Inhalt von multipart / x-mixed-replace zu machen

Im Grunde genommen verfassen Sie die Antwort als Mime-Objekt mit dem Inhaltstyp multipart / x-mixed-replace und senden die erste "Version" eines Dokuments. Der Browser hält den Socket offen.

Wenn der Server dann entscheidet, mehr Daten zu übertragen, wird eine neue "Version" des Dokuments vom Server gesendet, und der Browser ersetzt den Inhalt intelligent (innerhalb des Frames / Iframes, der den Inhalt enthält).

Dies war eine frühe Art, Webcams zu machen, bei denen der Server Bild für Bild nach unten (push) senden würde, und der Browser würde einfach immer wieder das Bild im Dokument ersetzen. Dies ist auch eine Möglichkeit, eine "Loading ..." -Nachricht über eine einzelne HTTP-Anfrage auszuführen.

    
alecf 05.04.2010 16:40
quelle

Tags und Links