Как использовать Django с веб-сервером Tornado?Как использовать Django с веб-сервером Tornado?
ответ
Существует проект под названием tornado-proxy, который поможет вам. Но я хотел бы рекомендовать вам использовать Nginx. В конфигурации Nginx можно теперь использовать proxy_pass, чтобы направить ваши звонки, как это:
location /comet {
proxy_pass http://localhost:8081;
}
location/{
proxy_pass http://localhost:8080;
}
В реальном мире вы бы подключить Django и некоторые производства готовых веб-сервер с WSGI. В этой демонстрации показано, как вы можете запускать Tornado (и его веб-сервер) и Django рядом с одним модулем python, обслуживающим разные префиксы URL: https://github.com/bdarnell/django-tornado-demo. Торнадо блокирует выполнение любого запроса, направленного на Django.
Удивительно полезно, спасибо за django-tornado-demo – securecurve
Это очень просто (особенно с django 1.4).
1 - просто создайте проект django (и приложения) и убедитесь, что он работает нормально.
2- создать новый файл питона в корневой папке (тот же каталог, где вы использовали django-admin.py startproject
)
3- затем скопировать код, приведенный ниже, редактировать os.environ['DJANGO_SETTINGS_MODULE']
линию, и вставить его в этом новом .py файле.
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()
Джанго 1.6+ это должно быть так:
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:
Я создал минимальный рабочий пример, который показывает, как использовать веб-сервер для Торнадо хорошо работать с django:
https://github.com/tamasgal/django-tornado
ОРИГИНАЛЬНАЯ ПОЧТА:
Просто замечание: рабочий процесс приложения WSGI был изменен с 1,6 до 1,7. Вы должны заменить ввозных
import django.core.handlers.wsgi
с
from django.core.wsgi import get_wsgi_application
и изменить инициализацию приложения из
application = django.core.handlers.wsgi.WSGIHandler()
в
application = get_wsgi_application()
Это модифицированный треска e из ответа Моайяда Яги:
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 не является веб-сервером. Он поставляется с базовым веб-сервером для разработки проектов Django, но не подходит для использования в производственных средах. –
Совершенно верно, хотя я предполагал, что xRobot использовал Django (с его веб-сервером) как полный веб-сервер/фреймворк для создания своего веб-проекта. Я пощадил ему подробности. – MyGGaN
Я играл с чатом и торнадо на своем компьютере, и он отлично работает. На моем сервере я использую рамки nginx и django, но я не знаю, где поставить Tornado. P.s. Вы пробовали также Push-модуль для Nginx? Спасибо;) – xRobot