龙卷风WebSocket问题

时间:2011-05-05 05:05:27

标签: python module tornado websocket

最后决定将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 个答案:

答案 0 :(得分:6)

  • tornado.httpserver:

    1. 非阻塞,单线程 HTTP服务器。
    2. 典型应用程序几乎没有与HTTPServer类直接交互。
    3. HTTPServer是一个非常基本的连接处理程序。除了解析HTTP请求主体和标头之外,HTTPServer中实现的仅HTTP语义是HTTP / 1.1保持活动连接。
  • tornado.ioloop:

    1. 非阻塞套接字的I / O事件循环。
    2. 因此,ioloop可用于设置响应的超时
    3. 通常,RequestHandler和龙卷风中的其他方法不是线程安全的。特别是,只能从主线程调用诸如write(),finish()和flush()之类的方法。如果您使用多个线程,则在完成请求之前使用 IOLoop .add_callback将控制权转移回主线程非常重要。
  • tornado.web:

    1. 提供 RequestHandler 应用
    2. 帮助您利用其他工具和优化来充分利用Tornado非阻塞Web服务器和工具。
    3. 所以,这些是本单元的规定:
      • 入口点:Hook用于子类初始化。
      • 输入
      • 输出
      • 缓存

我希望,这将涵盖您留下的模块。

答案 1 :(得分:1)

是的,因为您正在使用您引用的每个模块/包中的每个导入,所以需要它们。如果您在源代码顶部引用某些内容但从未在以下任何代码中再次使用它,那么您当然不需要它们,但在这种情况下您使用的是导入。