我想拥有龙卷风后端的django管理面板,它将处理来自在线游戏的请求。我现在不知道,以下一种方式加载django app是个好主意:
wsgi_app = tornado.wsgi.WSGIContainer(
django.core.handlers.wsgi.WSGIHandler())
tornado_app = tornado.web.Application(
[
('/hello-tornado', HelloHandler),
('.*', tornado.web.FallbackHandler, dict(fallback=wsgi_app)),
])
server = tornado.httpserver.HTTPServer(tornado_app)
server.listen(options.port)
tornado.ioloop.IOLoop.instance().start()
HelloHandler将成为后端解析器。
在组合wsgi + ioloop时我会失去一些表现吗?
如果它是一个糟糕的解决方案,它可以运行2个应用程序:django admin和tornado web。你能否回答我如何在Tornado App中使用Django ORM?
答案 0 :(得分:15)
只需采用这个等式并解决它。
现在,逐点移动:
这里最好的方式 - 不要将Django ORM与龙卷风一起使用。
第二种方式 - 如果您确定它不会阻止整个应用程序,您可以深入深入并将其直接集成到龙卷风中。从this回答中解决问题。
第三种方式 - 您可以将django应用程序转换为服务,这会使ORM工作繁重,您可以使用龙卷风中的AsyncHTTPCLient
访问此服务。
第四种方式 - 将龙卷风Web服务器集成到您的django应用程序中。实际上,它会给你带来很小的性能提升。
第五种方式 - 使用两个龙卷风Web服务器。听起来很疯狂,是的。使用一个与Django ORM集成,第二个与AsyncHTTPClient
。
我相信,你可以充分利用2个世界。
答案 1 :(得分:5)
Django不是异步的,因此在Tornado中运行Django将消除您从Tornado获得的大部分性能优势。
如果你想要最大的异步性能,你应该将Tornado与非阻塞数据库一起使用(我假设你想让Django管理员使用SQL数据库)。
如果您想要最大程度的开发,请使用Django及其ORM系统和管理工具。
不幸的是,你不能只混合两全其美。
所以,是的,你会失去表现。在这种情况下,我可能会使用Tornado并放弃Django管理员。如果您已经做好了妥协,那么您可以编写两个应用程序,共享一个数据库,但这意味着您需要维护两个数据访问层。