2010-03-28 37 views

Trả lời

4

Có một dự án gọi là tornado-proxy sẽ giúp bạn. Nhưng tôi muốn khuyên bạn nên sử dụng Nginx. Trong cấu hình Nginx bây giờ bạn có thể sử dụng proxy_pass chỉ đạo các cuộc gọi của bạn như thế này:

location /comet { 
    proxy_pass http://localhost:8081; 
} 

location/{ 
    proxy_pass http://localhost:8080; 
} 
+22

Django không phải là máy chủ web. Nó đi kèm với một máy chủ web cơ bản để hỗ trợ trong việc phát triển các dự án Django, nhưng không thích hợp để được sử dụng trong môi trường sản xuất. –

+1

Hoàn toàn đúng, mặc dù tôi giả định rằng xRobot đã sử dụng Django (với máy chủ web của nó) như một máy chủ web hoàn chỉnh/khuôn khổ để xây dựng dự án web của mình. Tôi tha cho anh ta chi tiết. – MyGGaN

+0

Tôi đã chơi với trò chuyện và lốc xoáy trên máy tính của mình và nó hoạt động hoàn hảo. Trên máy chủ của tôi, tôi đang sử dụng khung nginx và django nhưng tôi không biết đặt Tornado ở đâu. P.s. Bạn đã thử Push Module cho Nginx chưa? Cảm ơn;) – xRobot

2

Trong thế giới thực, bạn sẽ kết nối Django và một số máy chủ web sản xuất sẵn sàng với WSGI. Bản demo này cho thấy cách bạn có thể chạy Tornado (và đó là máy chủ web) và Django cạnh nhau từ một mô-đun python phục vụ các tiền tố URL khác nhau: https://github.com/bdarnell/django-tornado-demo. Tornado sẽ chặn phục vụ bất kỳ yêu cầu nào được chuyển đến Django.

+0

Thật hữu ích, cảm ơn vì django-tornado-demo – securecurve

45

nó rất đơn giản (đặc biệt là với django 1.4).

1 - chỉ cần xây dựng dự án django của bạn (và ứng dụng) và đảm bảo nó hoạt động tốt.

2- tạo một file python mới tại thư mục gốc (giống dir nơi bạn sử dụng django-admin.py startproject)

3- sau đó copy đoạn code bên dưới, chỉnh sửa các dòng os.environ['DJANGO_SETTINGS_MODULE'], và dán nó vào tập tin đó py mới.

import os 
import tornado.httpserver 
import tornado.ioloop 
import tornado.wsgi 
import sys 
import django.core.handlers.wsgi 
#sys.path.append('/home/lawgon/') # path to your project (if you have it in another dir). 


def main(): 
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module 
    application = django.core.handlers.wsgi.WSGIHandler() 
    container = tornado.wsgi.WSGIContainer(application) 
    http_server = tornado.httpserver.HTTPServer(container) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

if __name__ == "__main__": 
    main() 

Django 1.6 + nó phải như thế này:

import os 
import tornado.httpserver 
import tornado.ioloop 
import tornado.wsgi 
from django.core.wsgi import get_wsgi_application 

def main(): 
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myproject.settings' # path to your settings module 
    application = get_wsgi_application() 
    container = tornado.wsgi.WSGIContainer(application) 
    http_server = tornado.httpserver.HTTPServer(container) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

if __name__ == "__main__": 
    main() 
+4

Điều này thật tuyệt vời. Điều này làm việc ngay lập tức. – Glycerine

+1

Bravo! Tôi thực sự mong muốn thử điều đó! – Jon

+0

Cách gọi tập tin new.py – Shiva

4

UPDATE:

Tôi tạo ra một bản demo làm việc tối thiểu trong đó cho thấy làm thế nào để sử dụng máy chủ web Tornado để chạy độc đáo với django:

https://github.com/tamasgal/django-tornado

BÀI ĐĂNG ORIGINAL:

Chỉ cần lưu ý: Luồng ứng dụng WSGI đã được thay đổi từ 1,6 đến 1,7. Bạn phải thay thế nhập khẩu

import django.core.handlers.wsgi 

với

from django.core.wsgi import get_wsgi_application 

và thay đổi khởi động ứng dụng từ

application = django.core.handlers.wsgi.WSGIHandler() 

để

application = get_wsgi_application() 

Đây là cá tuyết sửa đổi e từ câu trả lời của Moayyad Yaghi:

import os 
import tornado.httpserver 
import tornado.ioloop 
import tornado.wsgi 
import sys 
import django.core.handlers.wsgi 
from django.core.wsgi import get_wsgi_application 
#sys.path.append('/home/lawgon/') # path to your project (if you have it in another dir). 


def main(): 
    os.environ['DJANGO_SETTINGS_MODULE'] = 'myProject.settings' # path to your settings module 
    application = django.core.handlers.wsgi.WSGIHandler() 
    application = get_wsgi_application() 
    container = tornado.wsgi.WSGIContainer(application) 
    http_server = tornado.httpserver.HTTPServer(container) 
    http_server.listen(8888) 
    tornado.ioloop.IOLoop.instance().start() 

if __name__ == "__main__": 
    main() 
Các vấn đề liên quan