2017-01-09 17 views
5

Tôi đang cố gắng triển khai Sự kiện máy chủ được gửi (SSE) trong khung Django. Rõ ràng với tôi rằng tôi có thể thực hiện một view như thế này:Sử dụng máy chủ Django đã gửi sự kiện với bài đăng cơ sở dữ liệu

@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 

Nhưng tôi muốn để kích hoạt cuộc gọi SSE bất cứ khi nào một entry mới được thực hiện trong một bảng cơ sở dữ liệu, từ post_save của bảng, Làm thế nào tôi có thể có thể đạt được điều đó ở đây kể từ eventStream ở đây là một chức năng máy phát điện.

Trả lời

7

Django là xây dựng xung quanh chu trình request/response có nghĩa là nó không hoạt động tốt với WebSockets hoặc thậm chí SSE. Trong ví dụ của bạn, không có cách nào để truyền tín hiệu post_save cho chế độ xem trừ khi bạn sử dụng đăng ký hàng đợi (rabbitmq, redis pubsub) trong chế độ xem và gửi dữ liệu trong trình xử lý tín hiệu.

Hãy xem xét các giải pháp khác để đẩy từ máy chủ:

  • bỏ phiếu dài
  • Django channels
  • Một giải pháp asynchronus như nodejs hoặc Tornado thay hoặc cùng với Django
+0

Trong số tất cả, các kênh Django là gọn gàng nhất. – Shubham

Các vấn đề liên quan