Je n'avais pas assez de temps pour faire WebSocket avec Django, mais je voulais le pousser côté serveur, j'ai donc décidé d'utiliser SSR pour le gérer en le poussant. Je vous serais reconnaissant si vous pouviez signaler des corrections.
Dans mon expérience avec un serveur local, lorsque j'ai interrompu la connexion, [ConnectionAbortedError: [WinError 10053] la connexion établie a été abandonnée par le logiciel de l'ordinateur hôte. Je reçois le message d'erreur C'est probablement inoffensif, mais c'est désagréable, alors soyez prudent lorsque vous le manipulez.
En gros, c'est une grande comète. En d'autres termes, c'est comme une poussée côté serveur push WebSocket peut être meilleur, mais l'avantage est un coût de mise en œuvre plus faible Si vous voulez en savoir plus, veuillez vérifier.
Faites simplement SSE. Omettez toutes les autres fonctions telles que l'ID
Distribution de flux
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'),
Obtenez-le et ajoutez-le à la liste
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) Désactiver ETag (autour du cache)? StreamingHttpResponse Le streaming peut être effectué en utilisant cette méthode. Il semble qu'il soit généralement utilisé lors de l'envoi de PDF, etc. Y compris cela, Django a beaucoup de fonctions, et c'est agréable de pouvoir atteindre l'endroit qui démange.
Cela a fonctionné pour le moment SSE a un faible coût d'implémentation et semble être utile dans les frameworks où le support WebSocket n'est pas avancé, mais il est étrange qu'il ne soit pas populaire pour une raison quelconque ~~ probablement parce qu'il n'est pas bon ~~
Recommended Posts