2010-03-28 18 views

Respuesta

4

Hay un proyecto llamado tornado-proxy que podría ayudarlo. Pero me gustaría recomendarle que use Nginx. En la configuración de Nginx ahora se podían utilizar PROXY_PASS a dirigir las llamadas de esta manera:

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

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

Django no es un servidor web. Viene con un servidor web básico para ayudar en el desarrollo de proyectos de Django, pero que no es adecuado para ser utilizado en entornos de producción. –

+1

Totalmente correcto, aunque supuse que xRobot estaba usando Django (con su servidor web) como un servidor web/marco completo para construir su proyecto web. Le perdoné los detalles. – MyGGaN

+0

He jugado con chat y tornado en mi computadora y funciona perfectamente. En mi servidor estoy usando nginx y django framework, pero no sé dónde poner Tornado. P.s. ¿Has probado también el módulo de empuje para Nginx? Gracias;) – xRobot

2

En el mundo real, que conectaría Django y algunos servidor web listo para la producción con WSGI. Esta demostración muestra cómo puede ejecutar Tornado (y su servidor web) y Django uno al lado del otro desde un módulo de python que sirve diferentes prefijos de URL: https://github.com/bdarnell/django-tornado-demo. Tornado se bloquearía al atender cualquier solicitud dirigida a Django, sin embargo.

+0

Sorprendentemente útil, gracias por el django-tornado-demo – securecurve

45

es muy simple (especialmente con django 1.4).

1 - solo crea tu proyecto django (y aplicaciones) y asegúrate de que funciona bien.

2- Crear un nuevo archivo de pitón en la carpeta raíz (mismo directorio en el que utiliza django-admin.py startproject)

3- continuación, copie el código de abajo, edite la línea os.environ['DJANGO_SETTINGS_MODULE'], y pegarlo en ese nuevo archivo .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() 

Django 1.6 + debería ser así:

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

Esto es excelente. Esto funcionó al instante. – Glycerine

+1

¡Bravo! ¡Estoy ansioso por probar eso! – Jon

+0

Cómo llamar al archivo new.py – Shiva

4

ACTUALIZACIÓN:

creé una demostración de trabajo mínima, que muestra cómo utilizar el servidor web Tornado para funcionar bien con Django:

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

POST ORIGINAL:

Solo una observación: El flujo de trabajo de la aplicación WSGI ha cambiado de 1.6 a 1.7. Usted tiene que reemplazar la importación

import django.core.handlers.wsgi 

con

from django.core.wsgi import get_wsgi_application 

y cambiar la inicialización de la aplicación

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

a

application = get_wsgi_application() 

Este es el bacalao modificada e a partir de la respuesta de la 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() 
Cuestiones relacionadas