Ich hatte nicht genug Zeit, um WebSocket mit Django zu machen, aber ich wollte serverseitigen Push machen, also entschied ich mich, SSR durch Push zu verwenden. Ich würde mich freuen, wenn Sie auf Korrekturen hinweisen könnten.
Wenn ich mit einem lokalen Server experimentierte und die Verbindung unterbrach, [ConnectionAbortedError: [WinError 10053] Die hergestellte Verbindung wurde von der Host-Computersoftware abgebrochen. Ich erhalte die Fehlermeldung Es ist wahrscheinlich harmlos, aber unangenehm. Seien Sie also vorsichtig, wenn Sie damit umgehen.
Grob gesagt ist es ein großartiger Komet. Mit anderen Worten, es ist wie ein Push auf der Serverseite WebSocket ist zwar besser, aber der Vorteil sind geringere Implementierungskosten Wenn Sie mehr wissen möchten, überprüfen Sie bitte.
Mach einfach SSE. Lassen Sie alle anderen Funktionen wie ID weg
Stream-Verteilung
views.py
from django.views.decorators.http import condition
from django.http import StreamingHttpResponse
from django.views.generic import UpdateView, DetailView, FormView, TemplateView, DeleteView
import time
@condition(etag_func=None)
def stream_response(request):
resp = StreamingHttpResponse(stream_response_generator(), content_type='text/event-stream')
return resp
def stream_response_generator():
while(True):
yield "data: %s\n" \
"retry:1000\n\n" % 0
time.sleep(1)
class DevSSETemplate(TemplateView):
template_name = "stream.html"
urls.py
url(r'^stream/$', views.stream_response, name='stream_response'),
url(r'^stream/template/$', DevSSETemplate.as_view(), name='stream_response_template'),
Holen Sie es sich und fügen Sie es der Liste hinzu
stream.html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div id ="log"></div>
</body>
<script>
window.onload = function() {
var evtSource = new EventSource("{% url 'accounts:stream_response' %}");
var eventList = document.getElementById("log");
evtSource.onmessage = function(e) {
console.log(e);
var newElement = document.createElement("li");
newElement.innerHTML = "message: " + e.data;
eventList.appendChild(newElement);
};
}
</script>
</html>
@.condition(etag_func=None) ETag deaktivieren (um den Cache herum)? StreamingHttpResponse Streaming kann mit dieser Methode durchgeführt werden. Es scheint, dass es normalerweise beim Senden von PDF usw. verwendet wird. Einschließlich dieser hat Django viele Funktionen, und es ist schön, Zugang zum juckenden Bereich zu haben.
Es hat vorerst funktioniert SSE hat niedrige Implementierungskosten und scheint in Frameworks nützlich zu sein, in denen die WebSocket-Unterstützung nicht erweitert ist, aber es ist seltsam, dass es aus irgendeinem Grund nicht beliebt ist ~~ wahrscheinlich, weil es nicht gut ist ~~
Recommended Posts