我正在尝试在Django Framework中实现服务器发送事件(SSE).我很清楚我可以这样实现view
:
@csrf_exempt def event_stream(request): def eventStream(): yield "data:Server Sent Data\n\n" response = HttpResponse(eventStream(), content_type="text/event-stream") response['Cache-Control'] = 'no-cache' return response
但是我想在数据库表中创建一个新条目时触发SSE调用,从post_save
表中可以实现,因为eventStream
这里是生成器函数.
Django是围绕请求/响应周期构建的,这意味着它不能与websockets甚至SSE一起使用.在您的示例中,除非您在视图中使用订阅队列(rabbitmq,redis pubsub)并在信号处理程序中发送数据,否则无法将post_save信号传播到视图.
考虑从服务器推送的其他解决方案:
长期民意调查
Django频道
像nodejs或龙卷风一样的异步解决方案,或者与Django一起使用