3

トルネードでサーバーを実行しています。websocket同じサーバーを開くページがあります。このページの複数のインスタンスを開くと、1つを除いてすべてが待機することがわかりました。その後、WebSocketが終了してから、別のWebSocketが開始されます。私が何か間違ったことをしているというこの通常の竜巻の振る舞いですか?

以前、サーバーはで実行されていましたが、WebSocketサポートのためdjangoにに移行しました。tornadoそのために、フォールバックサーバーをdjangoとして使用します。

#!/usr/bin/env python

# Run this with
# PYTHONPATH=. DJANGO_SETTINGS_MODULE=testsite.settings testsite/tornado_main.py
# Serves by default at
# http://localhost:8080/hello-tornado and
# http://localhost:8080/hello-django

from tornado.options import options, define, parse_command_line
import django.core.handlers.wsgi
import tornado.httpserver
import tornado.ioloop
import tornado.web
import tornado.wsgi

define('port', type=int, default=8000)

class HelloHandler(tornado.web.RequestHandler):
  def get(self):
    self.write('Hello from tornado')

def main():
  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()

if __name__ == '__main__':
  main()

複数の接続を可能にする何かを行うことはできますか?

4

2 に答える 2

0

これを適切に機能させるには、tornado の Asych 施設を調べる必要があります。Tornado は通常の状態ではシングル スレッド スタックであるため、一度に 1 つの接続しか処理できません。

通常の @asynchronous デコレータを使用するか、その gen ライブラリを使用して、コードで複数の接続を処理できるようにすることができます。

デコレータ: http://www.tornadoweb.org/documentation/web.html#decorators

世代: http://www.tornadoweb.org/documentation/gen.html

@asynchronous デコレーターを使用する場合は、使用が終了したら接続を閉じる必要があるため、ドキュメントを注意深く読んでください。

于 2012-11-05T20:28:42.820 に答える
-1

はい、これは通常の Tornado の動作であり、Django のような重いブロッキング アプリケーションを実行しようとした場合に備えています。

間違いなく、django と tornado は別々の OS プロセスで実行する必要があります。特に Django ORM を使用している場合。

理由を説明する必要がありますか?

于 2012-11-05T22:23:54.213 に答える