Tornado WebSocket Question

1

Наконец, решил пойти с 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) для запуска сервера.

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

  • 1
    да они нужны
  • 0
    Хорошо, спасибо.
Теги:
module
websocket
tornado

2 ответа

6
  • tornado.httpserver:

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

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

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

Надеюсь, это покроет оставшиеся модули.

  • 0
    В tornado.ioloop он однопоточный, или у каждого запроса есть свой поток? Я надеюсь, что это многопоточный, в противном случае код будет блокировать ...
1

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню