2011-01-23 23 views
5

Tôi không tìm ai đó để mã câu trả lời, nhưng tôi đã tự hỏi nếu ai đó chỉ có thể cung cấp cho một cái nhìn tổng quan chung về cách sử dụng Django với node.js để có được ngay lập tức, sự kiện theo định hướng cập nhật.Sử dụng node.js cho các cập nhật dựa trên sự kiện ở Django?

Tôi có "nguồn cấp dữ liệu tin tức" và tôi muốn cho nguồn cấp dữ liệu đó cập nhật khi có mục mới. Ý tưởng chung tôi có là chỉ cần mở kết nối với máy chủ nút qua javascript, có máy chủ nút "ngủ" cho đến khi một mục mới xuất hiện, tại thời điểm đó nó trả về dữ liệu và phía Django bắt đầu một kết nối khác.

Sự nhầm lẫn của tôi xuất hiện khi thực sự viết mã node.js - tài liệu hiển thị nhiều thông tin, nhưng không phải cách sử dụng thông tin đó. Tôi sẽ đánh giá cao nếu một người nào đó có thể hướng tôi đến nơi để tìm kiếm điều này - tôi có sử dụng một cái gì đó giống như một EventEmitter không? Làm thế nào tôi có thể có một kịch bản Django-side yêu cầu máy chủ nút để nghe cho các sự kiện chỉ liên quan đến một người dùng cụ thể?

Cảm ơn trước!

Trả lời

2

Nếu bạn không thoải mái khi viết mã node.js, bạn nên xem qua các máy chủ dựa trên Python được xây dựng đặc biệt để hỗ trợ các yêu cầu HTTP chạy dài.

Tornado là một trong số họ và bạn có thể chạy Django bên trong nó (ví dụ: http://lincolnloop.com/blog/2009/sep/15/using-django-inside-tornado-web-server/). Việc sử dụng CPU/bộ nhớ của nó có thể không phải là sao như node.js, nhưng nó chắc chắn đáng xem!

7

Không sao, tôi nghĩ tôi đã tìm ra. Tôi tạo ra emitter của riêng tôi và có nó lắng nghe cho các sự kiện của riêng tôi.

var myemitter = new events.EventEmitter(); 

Và khi một yêu cầu từ Django bước vào,

myemitter.addListener('action'+userid,function(data){ 
    //do something with data 
} 

yêu cầu đó sẽ được thông qua một cuộc gọi $.ajax() qua JavaScript cuộc thăm dò về cơ bản sẽ dài và đợi cho đến khi một cái gì đó đã xảy ra. Khi có sự cố xảy ra trên máy chủ, tức là người dùng đã làm điều gì đó, máy chủ sẽ đăng lên nút. Yêu cầu sẽ khiến sự kiện được phát ra:

myemitter.emit('action'+userid,data); 

... làm cho chức năng gọi lại từ đoạn mã thứ hai được gọi. Sau đó, nó tìm đối tượng phản hồi được liên kết với yêu cầu đó, trả về thông tin và được phân tích cú pháp bởi tập lệnh bên Django.

Hy vọng điều này sẽ giúp một người nào đó, nghĩ rằng tôi vừa đăng câu trả lời của tôi.

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