3

我有一个在龙卷风上运行的服务器。我有一个打开websocket同一服务器的页面。现在我观察到打开此页面的多个实例会使所有实例都等待,除了一个。只有在那个完成了它的 websocket 之后,另一个才会开始。这是我做错了什么的正常龙卷风行为吗?

早些时候我的服务器正在运行,django但我迁移到tornadowebsocket 支持。为此,我使用后备服务器作为 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

您需要查看龙卷风中的 Asych 设施才能使其正常工作。Tornado 在其正常状态下是一个单线程堆栈,因此您一次只能处理一个连接。

您可以使用普通的 @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。特别是如果您使用 Django ORM。

需要我描述为什么吗?

于 2012-11-05T22:23:54.213 回答