Tornado WebSocket Question - PullRequest
       19

Tornado WebSocket Question

1 голос
/ 05 мая 2011

Наконец решил использовать Tornado в качестве сервера WebSocket, но у меня есть вопрос о том, как это реализовано.

После базового урока по созданию работающего сервера я закончил с этим:

#!/usr/bin/env python

from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application
from tornado.websocket import WebSocketHandler

class Handler(WebSocketHandler):
        def open(self):
            print "New connection opened."

        def on_message(self, message):
                print message


        def on_close(self):
                print "Connection closed."

print "Server started."
HTTPServer(Application([("/", Handler)])).listen(1024)
IOLoop.instance().start()

Он прекрасно работает и все, но мне было интересно, если другие модули (tornado.httpserver), tornado.ioloop и tornado.web) на самом деле необходимы для запуска сервера.

Это не такая уж большая проблема, но я просто хотел убедиться, что нет лучшего способа сделать то, что ониделать (я еще не рассматривал эти модули).

Ответы [ 2 ]

6 голосов
/ 11 мая 2012
  • tornado.httpserver:

    1. A неблокирующий, однопоточный HTTP-сервер.
    2. Типичные приложения практически не взаимодействуют с классом HTTPServer.
    3. HTTPServer - это очень простой обработчик соединений. Помимо синтаксического анализа тела и заголовков HTTP-запроса, семантика HTTP only , реализованная в HTTPServer, - это соединения HTTP / 1.1 keep-alive.
  • tornado.ioloop:

    1. Цикл событий ввода / вывода для неблокирующих сокетов .
    2. Таким образом, ioloop можно использовать для установки времени ожидания ответа.
    3. Как правило, методы в RequestHandler и в других местах торнадо не являются потокобезопасными . В частности, такие методы, как write (), finish () и flush (), должны вызываться только из основного потока. Если вы используете несколько потоков, важно использовать IOLoop .add_callback для передачи управления обратно в основной поток перед завершением запроса.
  • tornado.web:

    1. Предоставляет RequestHandler и Приложение Классы
    2. Помогает с дополнительными инструментами и оптимизациями, чтобы использовать преимущества неблокирующего веб-сервера Tornado и инструментов.
    3. Итак, вот положения этого модуля:
      • Точки входа: крючок для инициализации подкласса.
      • Input
      • выход
      • печенье

Надеюсь, это охватит модули, которые вы оставили.

1 голос
/ 05 мая 2012

Да, они нужны, потому что вы используете каждый импорт из каждого модуля / пакета, на который вы ссылаетесь. Если вы ссылаетесь на что-то в начале вашего источника, но никогда не используете это снова в любом из следующего кода, тогда, конечно, вам это не нужно, но в этом случае вы используете свои импорты.

...