2017-01-09 36 views
5

Próbuję zaimplementować Server Sent Events (SSE) w Django Framework. Oczywiste jest dla mnie, że mogę realizować view takiego:Używanie Django Server Wysłane zdarzenia z bazą danych po zapisaniu

@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 

Ale chcę wywołać połączenie SSE gdy nowy wpis został dokonany w tabeli bazy danych, z post_save stołu, jak mogę być w stanie to osiągnąć od eventStream tutaj jest funkcja generatora.

Odpowiedz

7

Django jest zbudowany wokół cykl żądanie/odpowiedź, co oznacza, że ​​nie działa dobrze z WebSocket lub nawet SSE. W twoim przykładzie nie ma możliwości propagowania sygnału post_save do widoku, chyba że użyjesz subskrypcji do kolejki (rabbitmq, redis pubsub) w widoku i wyślesz dane do obsługi sygnału.

rozważyć inne rozwiązania do pchania z serwera:

  • długi odpytywania
  • Django channels
  • Rozwiązanie asynchronus jak nodejs lub tornado zamiast lub obok Django
+0

Wśród wszystkich kanałów Django neatest. – Shubham