1

我找到了这个:http ://www.niwi.be/post/django-sse-html5-server-sent-events-django/但它的边缘看起来很粗糙,并且处于 0.2 版不会我对此充满信心。

我知道 SSE 支持并不完全是火箭科学,所以也许它不是必需的,但我想我会看看其他人是否知道任何其他有帮助的项目或模块。

我正在寻找常用的模块建议或坚定的“自己动手”类型的答案。

4

2 回答 2

0

示例 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
于 2014-03-12T10:31:15.303 回答
0

要支持 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"
于 2015-05-05T12:24:01.190 回答