是否有任何好的Django插件/模块可用于向应用程序添加服务器发送的事件支持?

是否有任何好的Django插件/模块可用于向应用程序添加服务器发送的事件支持?,django,server-sent-events,Django,Server Sent Events,我发现了这一点:但它的边缘看起来相当粗糙,而版本0.2并没有让我对它充满信心 我知道SSE支持并不完全是火箭科学,所以也许它只是不需要,但我想我会看看是否有其他人知道任何其他项目或模块会有所帮助 我正在寻找一个常用的模块建议或“自己动手”类型的答案。Django SSE示例视图: class SSEView(View): def dispatch(self, request): response = http.StreamingHttpResponse(streaming_conten

我发现了这一点:但它的边缘看起来相当粗糙,而版本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_页面”。请参见以下代码示例:

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
使用decorator的原因是Django中不允许逐跳HTTP头“传输编码”

您可以在允许使用头的其他Python框架中使用头

response["Transfer-Encoding"] = "chunked"

只是说,版本号不是成熟的好指标。很久以前版本1.0的意思是“完成”,例如现在最新的稳定火狐是11,它还远没有完成。这是真的。我也看了一下实施情况。它可能能够实现我想要使用它的目的,但使用起来也有点尴尬。然而,我对Python和Django都是新手,所以我可能离@Olli很远