我找到了这个:http ://www.niwi.be/post/django-sse-html5-server-sent-events-django/但它的边缘看起来很粗糙,并且处于 0.2 版不会我对此充满信心。
我知道 SSE 支持并不完全是火箭科学,所以也许它不是必需的,但我想我会看看其他人是否知道任何其他有帮助的项目或模块。
我正在寻找常用的模块建议或坚定的“自己动手”类型的答案。
我找到了这个:http ://www.niwi.be/post/django-sse-html5-server-sent-events-django/但它的边缘看起来很粗糙,并且处于 0.2 版不会我对此充满信心。
我知道 SSE 支持并不完全是火箭科学,所以也许它不是必需的,但我想我会看看其他人是否知道任何其他有帮助的项目或模块。
我正在寻找常用的模块建议或坚定的“自己动手”类型的答案。
示例 Django SSE 视图:
class SSEView(View):
def dispatch(self, request):
response = http.StreamingHttpResponse(streaming_content=self.iterator(request=request), content_type="text/event-stream")
response['Cache-Control'] = 'no-cache'
response['connection'] = 'keep-alive'
return response
def iterator(self, request):
"""
Yield unseen events (based on session timestamp)
"""
user = request.user
while True:
user_ts = request.session.get("user_ts") # Last seen
sse = EVENT.find_one({
"ts": {"$gt" : user_ts}, # New event, after last-seen
"user_id": user._id}, # Only requester's event
})
if not sse:
time.sleep(random())
else:
yield sse
request.session["user_ts"] = sse["ts"] # Overwrite latest event time
要支持 SSE 中的压缩,您可以添加 Django 装饰器“gzip_page”。请参见以下代码示例:
from django.views.decorators.gzip import gzip_page
from django.utils.decorators import method_decorator
...
class SSEView(View):
@method_decorator(gzip_page)
def dispatch(self, request):
pass
使用装饰器的原因是 Django 中不允许逐跳 HTTP 标头“Transfer-Encoding”。
您可以在允许标头的其他 Python 框架中使用标头。
response["Transfer-Encoding"] = "chunked"