最终决定使用 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 :
- 非阻塞、单线程 HTTP 服务器。
- 典型的应用程序与 HTTPServer 类几乎没有直接交互。
- HTTPServer 是一个非常基本的连接处理程序。除了解析 HTTP 请求正文和 header 之外,在 HTTPServer 中实现的唯一 HTTP 语义是 HTTP/1.1 保持连接。
Tornado .ioloop :
- 非阻塞套接字的 I/O 事件循环。
- 因此,ioloop 可用于设置响应的超时时间。
- 一般来说,RequestHandler 和 tornado 中其他地方的方法不是线程安全的。特别是,诸如 write()、finish() 和 flush() 之类的方法只能从主线程调用。如果您使用多个线程,请务必使用 IOLoop.add_callback 在完成请求之前将控制权传回主线程。
Tornado 网:
- 提供RequestHandler和Application类
- 帮助使用其他工具和优化,以利用 Tornado 非阻塞网络服务器和工具。
- 因此,这些是此模块的规定:
- 入口点: Hook 子类初始化。
- 输入
- 输出
- cookies
我希望,这将涵盖您留下的模块。
