2012-06-07 27 views
23

Tôi cần phải xây dựng một hệ thống đẩy trong django, cơ bản chức năng của nó là để đẩy tin nhắn từ máy chủ đến trình duyệt.Làm thế nào để xây dựng một hệ thống push trong django?

Khi không thể sử dụng nút, tôi thích websocket hoặc quỹ đạo, nhưng tôi không biết làm thế nào để thực hiện bất kỳ của hai trong django. xin đề nghị một phương pháp cho tôi, điều này sẽ giúp tôi rất nhiều, thx.

Trả lời

11

Django không tốt trong việc "đẩy" mọi thứ cho khách hàng. Nếu django là lựa chọn duy nhất của bạn, cách duy nhất để bắt chước một cú đẩy là thông qua bỏ phiếu dài. Nhưng điều này không hiệu quả. Thay vào đó, websockets rất nóng. Tornado và xoắn có thể giúp bạn ở đây. Ngoài ra còn có một câu trả lời hoàn chỉnh hơn cho câu hỏi của bạn here.

+0

Toàn bộ trang web của tôi dựa trên django và Nginx, vì vậy tôi đoán đó không phải là cách hiệu quả để sử dụng Tornado hoặc xoắn phải không? – Stan666

+0

Tại sao không hiệu quả? Nó có phụ thuộc vào phần cứng của bạn không?Với ít nỗ lực bạn có thể có một quá trình lốc xoáy song song xử lý một số ổ cắm web .. – hymloth

+0

Xin lỗi tôi không hoàn toàn quen thuộc với cơn lốc xoáy, bạn có nghĩa là máy chủ lốc xoáy song song với django không? Suy nghĩ đầu tiên của tôi là làm điều này bên trong django, gây ra có django-websocket mà không phải là quá xấu. – Stan666

13

Một tùy chọn sẽ là sử dụng máy chủ WebSocket chạy song song với máy chủ Django của bạn có API REST/Push và sau đó thực hiện đẩy từ Django bằng cách đơn giản HTTP/POST tới máy chủ WebSocket. tất cả các máy khách WebSocket được kết nối.

Bằng cách đó, bạn không cần bất kỳ thay đổi cấu trúc/kỹ thuật nào đối với ứng dụng Django hiện có của mình, tuy nhiên vẫn có tính năng đẩy dựa trên WebSocket có thể mở rộng, hiện đại.

Đối với dịch vụ được lưu trữ ở trên, tôi có thể xem http://pusher.com.

Nếu bạn thích chạy của riêng mình, tôi có một cái nhìn tại http://autobahn.ws, được triển khai như một thiết bị ảo sẵn sàng để chạy (VMware, VirtualBox, Amazon EC2). Bạn có thể tìm các ví dụ hoạt động của REST/API tại đây https://github.com/tavendo/AutobahnPushPython

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của Autobahn Nguồn mở và làm việc cho Tavendo, cung cấp Autobahn.ws (đề nghị thương mại dựa trên Autobahn OSS).

+0

Tôi sẽ thử trên AutobahnPushPython, thx :) – Stan666

6

Có một mô-đun Django, mà hỗ trợ WebSockets out of the box sử dụng Redis như hàng đợi thông điệp. Hãy xem tại đây: https://github.com/jrief/django-websocket-redis

Tuyên bố từ chối trách nhiệm: Tôi là tác giả của thư viện đó.

+0

Bạn có thể giới thiệu một ví dụ tối thiểu không? –

+0

@RubberDuck ... Kiểm tra bản giới thiệu kho lưu trữ. Nó khá tốt. Bạn có thể kiểm tra cài đặt của mình: http://django-websocket-redis.readthedocs.org/en/latest/installation.html#check-your-installation Đây là bản trình diễn trực tiếp: http://websocket.aws.awesto.com/chat/ – nicorellius

9

Một thi hành WebSockets trong Django: https://github.com/jonashagstedt/swampdragon

Từ tài liệu: SwampDragon tận dụng Djangos ORM tuyệt vời, hỗ trợ tuyệt vời Tornados WebSocket (với dự phòng Tested trong IE7.), Và Redis tốc độ nhanh khủng khiếp.

1

Django omnibus

Sử dụng lốc xoáy bên trong và có hỗ trợ python 3.

4

Tính đến năm 2016, có Django Channels, mang websockets đến Django (1.8 trở lên).

Nó cũng là part of the official Django project.

+0

Tìm thấy cũng là một hướng dẫn đầy đủ cho Django + Kênh + Phản ứng: https://codyparker.com/django-channels-with-react/ – np8

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