Dynamische / Asynchrone Nachrichten auf Webseite anzeigen

Falc410

Captain
Dabei seit
Juni 2006
Beiträge
3.596
Ich erstelle momentan mit Django und Python eine Webseite. U.a. kann der User eine Audio Datei aufnehmen und hochladen. Wenn diese vom Server verarbeitet worden ist, soll dem Benutzer eine Nachricht angezeigt werden. In der Zwischenzeit soll sich dieser aber mit anderen Teilen der Webseite beschäftigen können.
Soweit so gut. Das Message Framework von Django stellt die Nachrichten direkt im HTML Code dar. Also wenn eine Seite aufgerufen wird und eine Nachricht vorliegt, wird diese in den HTML Code eingebettet.

Ich möchte das aber dynamisch haben. Dafür gibt es auch Module wie django-ajax-messages oder so ähnlich. Ich frage mich nur wie die Technologie dahinter funktioniert. Alle Lösungen die ich gefunden habe stellen die Nachrichten in einer View / URL als JSON zur Verfügung. Soweit ist mir noch alles klar. Aber wie kann ich mich per Javascript da als Observer subscriben? Busy-Waiting oder alle paar Sekunden schauen ob eine neue Nachricht da ist, wäre ja total ineffizient und wird sicher auch nicht gemacht.

Die einzige Möglichkeit die ich sonst kenne, asynchron vom Server mit einem Browserclient zu kommunizieren, ist über Websocket. Das habe ich in der Vergangenheit schon öfters gemacht. Aber ich sehe nicht dass die von mir gefundenen Lösungen auf Websockets setzen.

Wie ist es also technisch noch möglich, asynchron vom Server an einen Browser eine Nachricht zu schicken (damit dieser dann z.B. eine JSON Queue abruft und darstellt)?
 

FranzvonAssisi

Vice Admiral
Dabei seit
Dez. 2013
Beiträge
6.884
naja, soweit ich weiß entweder genauso wie du beschrieben hast - total ineffizient :D oder via WebSockets, aber das ist eigentlich mehr für dauerhafte Verbindungen, wie Onlinespiele im Browser und wäre für diese eine Übertragung genauso ineffizient, wenn nicht sogar mehr :)

Andere Mittel kenne ich nicht...

Lg, Franz
 

Falc410

Captain
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
3.596
Naja die Verbindung kann ja ruhig dauerhaft sein. Ich möchte z.B. auch dynamisch Ranglisten updaten, oder Nachrichten anzeigen wenn andere User eine Aktion getätigt haben. Der Vergleich mit einem Onlinespiel ist gar nicht so abwegig. Ich hatte eben nur erwartet dass es noch eine andere Möglichkeit gibt.
Es gibt ja viele Webseiten die einen Informieren wenn man eine neue Nachricht von einem User erhalten hat - ohne das man die Seite refreshed oder damit interagiert.
 

dreamy_betty

Lt. Commander
Dabei seit
Juni 2006
Beiträge
1.130
Aber wie kann ich mich per Javascript da als Observer subscriben? Busy-Waiting oder alle paar Sekunden schauen ob eine neue Nachricht da ist, wäre ja total ineffizient und wird sicher auch nicht gemacht.
Doch das wird oft so gemacht. Wenn zwischen Client und Server keine permanente Verbindung existiert auf welcher der Server eigenständig Informationen senden kann, die schon erwähnten WebSockets, dann gibt es nur noch eine andere Möglichkeit: der Client muss den Server fragen, ob für ihn neue Daten vorliegen. Damit das ohne große Wartezeiten funktioniert, muss der Client regelmäßig und wiederholt den Server abfragen.
 

Falc410

Captain
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
3.596
Ok danke - die Lösung finde ich aber nicht schön und dann ist es ja auch nicht wirklich Live. Ich weiß auch nicht wie sich die Performance auf den Client und Server auswirkt wenn der alle paar Sekunden nach schauen muss. Dann wohl doch Websocket.
 

crvn075

Lt. Junior Grade
Dabei seit
Juli 2015
Beiträge
432
Polling
Long Polling
Streaming ("Forever Frame")
Server Sent Events
WebSockets

Pro, Contra, Beispiele gibt's bei Google.
 

Falc410

Captain
Ersteller dieses Themas
Dabei seit
Juni 2006
Beiträge
3.596
Danke, das sind genau die Keywords die ich gebraucht habe.
 
Top