Skip to main content
 首页 » 编程设计

python之Tornado WebSocket 问题

2025年05月04日35daizhj

最终决定使用 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)来运行服务器。

拥有它们并不是什么大问题,但我只是想确保没有更好的方法来完成它们所做的一切(我还没有介绍这些模块。)。

请您参考如下方法:

  • tornado.httpserver :

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

    1. 非阻塞套接字的 I/O 事件循环。
    2. 因此,ioloop 可用于设置响应的超时时间。
    3. 一般来说,RequestHandler 和 tornado 中其他地方的方法不是线程安全的。特别是,诸如 write()、finish() 和 flush() 之类的方法只能从主线程调用。如果您使用多个线程,请务必使用 IOLoop.add_callback 在完成请求之前将控制权传回主线程。
  • Tornado 网:

    1. 提供RequestHandler和Application类
    2. 帮助使用其他工具和优化,以利用 Tornado 非阻塞网络服务器和工具。
    3. 因此,这些是此模块的规定:
      • 入口点: Hook 子类初始化。
      • 输入
      • 输出
      • cookies

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