Làm cách nào để sử dụng Django với máy chủ web Tornado?Cách sử dụng Django với máy chủ web Tornado?
Trả lời
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;
}
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.
Thật hữu ích, cảm ơn vì django-tornado-demo – securecurve
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()
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()
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. –
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
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