2010-03-28 4 views

ответ

4

Существует проект под названием tornado-proxy, который поможет вам. Но я хотел бы рекомендовать вам использовать Nginx. В конфигурации Nginx можно теперь использовать proxy_pass, чтобы направить ваши звонки, как это:

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

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

Django не является веб-сервером. Он поставляется с базовым веб-сервером для разработки проектов Django, но не подходит для использования в производственных средах. –

+1

Совершенно верно, хотя я предполагал, что xRobot использовал Django (с его веб-сервером) как полный веб-сервер/фреймворк для создания своего веб-проекта. Я пощадил ему подробности. – MyGGaN

+0

Я играл с чатом и торнадо на своем компьютере, и он отлично работает. На моем сервере я использую рамки nginx и django, но я не знаю, где поставить Tornado. P.s. Вы пробовали также Push-модуль для Nginx? Спасибо;) – xRobot

2

В реальном мире вы бы подключить Django и некоторые производства готовых веб-сервер с WSGI. В этой демонстрации показано, как вы можете запускать Tornado (и его веб-сервер) и Django рядом с одним модулем python, обслуживающим разные префиксы URL: https://github.com/bdarnell/django-tornado-demo. Торнадо блокирует выполнение любого запроса, направленного на Django.

+0

Удивительно полезно, спасибо за django-tornado-demo – securecurve

45

Это очень просто (особенно с 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() 
+4

Это отлично. Это сработало мгновенно. – Glycerine

+1

Bravo! Я с нетерпением жду этого! – Jon

+0

Как вызвать new.py файл – Shiva

4

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()