1、简单的sse只要用django内置的StreamingHttpResponse就可以实现
2、django-sse这个第三方库已经有10年没有更新,不要用这个库了。
3、告知前端关闭SSE连接需要发送yield "event: close\ndata: \n\n" 而不能只发送yield "event: close\n"
# 正确方案:
for i in range(10):time.sleep(1)# 在某个条件满足时生成特殊的 SSE 事件,结束推送if i == 3:yield "event: close\ndata: \n\n" # 发送一个包含 event 和 data 字段的 SSE 事件returnyield f"data: {i}\n\n"# 如果推送内容只含[event:close],不含[data:空],会让前端触发eventSource.onerrorfor i in range(10):time.sleep(1)if i == 3:yield "event: close\n" #前端会报错returnyield f"data: {i}\n\n"
4、JavaScript的EventSource只支持get方法,如果要用post方法。可以使用fetch 或者微软的fetchEventSource (npm install @microsoft/fetch-event-source) 原生fetch实现可以参考 https://article.juejin.cn/post/7237024604962865213