8

オンラインゲームからのリクエストを処理するトルネードバックエンドを備えたdjango管理パネルが欲しいです。現時点ではわかりませんが、次の方法でdjangoアプリをロードすることをお勧めします:

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 を組み合わせるとパフォーマンスが低下しますか?

悪い解決策である場合、django admin と tornado web の 2 つのアプリを実行できます。Tornado App で Django ORM を使用する方法を教えてください。

4

2 に答える 2

15

この方程式を取って解いてください。

  • ノンブロッキング IO - X が必要です。
  • django ORM-Y が欲しい。
  • django admin - Z が必要です。

次に、ポイントごとに移動します。

  • X の場合、竜巻自体で十分です。
  • Z の場合は、django 自体で十分です。一度に何千人もの管理者がサイトを管理する必要はないと思います。
  • Yの場合は難しいです。Django ORM が自分自身をブロックしています。

ここでの最善の方法-トルネードでDjango ORMを使用しないでください。

2 番目の方法 - アプリケーション全体をブロックしないことが確実な場合は、より深く掘り下げて tornado に直接統合できます。この答え から解決策を取ってください。

AsyncHTTPCLient3 番目の方法 - Django アプリケーションをサービスに変換できます。これにより、ORM での作業が重くなり、トルネードからこのサービスにアクセスできます。

4 番目の方法 - tornado Web サーバーを django アプリケーションに統合します。実際には、パフォーマンスがわずかに向上します。

第 5 の方法 - 2 つのトルネード Web サーバーを使用します。はい、クレイジーに聞こえます。1 つを Django ORM と統合して使用し、2 つ目をAsyncHTTPClient.

私は、あなたが2つの世界のベストを取ることができると信じています.

于 2012-07-30T13:27:26.743 に答える
5

Djangoは非同期ではないため、TornadoでDjangoを実行すると、Tornadoから得られる可能性のあるパフォーマンス上の利点のほとんどが失われます。

非同期パフォーマンスを最大にしたい場合は、非ブロッキングデータベースでTornadoを使用する必要があります(SQLデータベースで使用するDjango管理者が必要だと想定しています)。

開発を最大限に容易にしたい場合は、ORMシステムと管理ツールを備えたDjangoを使用してください。

残念ながら、両方の長所を組み合わせるだけでは不十分です。

したがって、はい、パフォーマンスが低下します。この状況では、おそらくTornadoを使用して、Django管理者をあきらめるでしょう。妥協点にとらわれている場合は、データベースを共有して2つのアプリを作成できますが、それは2つのデータアクセス層を維持する必要があることを意味します。

于 2012-01-06T15:57:24.193 に答える