Skip to main content

Tornado 4.0中的新功能

2014年7月15日

强调

向后兼容性说明

  • tornado.concurrent.Future 不再是线程安全的;当需要螺纹安全时使用 concurrent.futures.Future

  • Tornado现在取决于 认证 包,而不是捆绑自己的Mozilla CA列表副本。这将在使用 pipeasy_install 时自动安装。

  • 此版本包括对版本 3.2.1 中首次引入的安全cookie格式的更改,以及版本 3.2.2 中的xsrf令牌更改。如果要从较早版本升级,请参阅这些版本的发行说明。

  • 默认情况下,来自其他原始站点的WebSocket连接现在被拒绝。要接受跨源WebSocket连接,请覆盖新方法 WebSocketHandler.check_origin

  • WebSocketHandler 不再支持旧的 draft 76 协议(这主要影响Safari 5.x浏览器)。应用程序应为这些浏览器使用非websocket解决方法。

  • 替代 IOLoop 实现的作者应该在此版本中看到对 IOLoop.add_handler 的更改。

  • RequestHandler.async_callbackWebSocketHandler.async_callback 包装函数已删除;它们已经过时了很长时间,由于堆栈上下文(和最近的协程)。

  • curl_httpclient 现在需要最小的libcurl版本7.21.1和pycurl 7.18.2。

  • 支持 RequestHandler.get_error_html 已被删除;重写 RequestHandler.write_error

其他说明

  • git存储库已移至 https://github.com/tornadoweb/tornado。所有旧链接应重定向到新位置。

  • 公告邮件列表 现在可用。

  • 所有Tornado模块现在都可以在Google App Engine上导入(虽然App Engine环境不允许 IOLoop 使用的系统调用,因此许多模块仍然无法使用)。

tornado.auth

  • 修复了 .FacebookMixin 中对Python 3的错误。

  • 当使用 Future 接口时,异常更可靠地传递给调用者。

tornado.concurrent

tornado.curl_httpclient

  • curl_httpclient 现在传递 response.reason 中的HTTP“reason”字符串。

tornado.gen

  • 协同程序的性能已得到改进。

  • 协程不再生成 StackContexts 默认情况下,但他们将根据需要在需要时创建。

  • tornado.gen 模块的内部已经被重写,以提高使用 Futures 时的性能,以牺牲旧的 YieldPoint 接口的一些性能降级为代价。

  • 新函数 with_timeout 封装 Future,如果在给定的时间内未完成,则引发异常。

  • 新对象 moment 可以顺水推舟让IOLoop来恢复之前一个迭代运行。

  • Task 现在是返回 Future 而不是 YieldPoint 子类的函数。此更改应对应用程序代码透明,但允许 Task 利用新优化的 Future 处理。

tornado.http1connection

  • 新模块包含由 tornado.httpservertornado.simple_httpclient 共享的HTTP实现。

tornado.httpclient

  • 命令行HTTP客户端(python -m tornado.httpclient $URL)现在可以使用Python 3。

  • 修复了 AsyncHTTPClient 关闭中的内存泄漏,影响创建了许多HTTP客户端和IOLoops的应用程序。

  • 新客户端请求参数 decompress_response 替换现有的 use_gzip 参数;两个名称都被接受。

tornado.httpserver

  • tornado.httpserver.HTTPRequest 已迁移到 tornado.httputil.HTTPServerRequest

  • HTTP实现已经与 tornado.http1connection 中的 tornado.simple_httpclient 统一。

  • 现在支持请求主体的 Transfer-Encoding: chunked

  • 如果 decompress_request=True 被传递给 HTTPServer 构造函数,现在支持请求主体的 Content-Encoding: gzip

  • HTTPServerRequestconnection 属性现在记录供公众使用;应用程序应通过 HTTPConnection 接口写入其响应。

  • HTTPServerRequest.writeHTTPServerRequest.finish 方法现已废弃。 (RequestHandler.writeRequestHandler.finishnot 不推荐使用;这只适用于 HTTPServerRequest 上的方法)

  • 除了旧的 request_callback 接口,HTTPServer 现在还支持 HTTPServerConnectionDelegate。代理接口支持请求主体的流。

  • HTTPServer 现在检测发送与实际内容不一致的 Content-Length 错误的应用程序的错误。

  • 新构造函数参数 max_header_sizemax_body_size 允许为请求的不同部分设置单独的限制。即使在流模式下也应用 max_body_size

  • 新的构造函数参数 chunk_size 可用于限制每次请求一次读入内存的数据量。

  • 新的构造函数参数 idle_connection_timeoutbody_timeout 允许在读取请求时设置时间限制。

  • 现在为所有HTTP方法解析表单编码的消息体,而不仅仅是 POSTPUTPATCH

tornado.httputil

tornado.ioloop

tornado.iostream

  • 大多数 IOStream 方法的 callback 参数现在是可选的。当调用没有回调时,该方法将返回一个用于协同程序的 Future

  • 新方法 IOStream.start_tlsIOStream 转换为 SSLIOStream

  • 当出现没有 errno 属性的 IOErrorOSError 时,不再困惑。

  • BaseIOStream.read_bytes 现在接受 partial 关键字参数,可以用于在读取完整金额之前返回。这是一个更加coroutine友好的替代 streaming_callback

  • BaseIOStream.read_untilread_until_regex 现在接受一个 max_bytes 关键字参数,如果从给定字节数不能满足请求将导致请求失败。

  • 如果 IOStream 不需要数据来满足挂起的读操作,则它不再从套接字读入内存。作为副作用,如果另一方关闭连接,而缓冲区中存在未消耗的数据,则close回调将不会立即运行。

  • 默认的 chunk_size 已增加到64KB(从4KB)

  • IOStream 构造函数接受一个新的关键字参数 max_write_buffer_size (默认为unlimited)。如果未发送的缓冲数据量超过此限制,则对 BaseIOStream.write 的调用将提高 StreamBufferFullError

  • ETIMEDOUT 错误不再记录。如果需要区分超时和其他形式的关闭连接,请从close回调中检查 stream.error

tornado.netutil

  • bind_sockets 自动选择端口时,它将为IPv4和IPv6使用相同的端口。

  • 默认情况下,在Python 3.3及更高版本上禁用TLS压缩(在旧版本中无法更改此选项)。

tornado.options

  • 现在可以通过将 options.logging 设置为 None 而不是字符串 "none" 来禁用默认日志配置。

tornado.platform.asyncio

  • 现在可以在Python 2.6。

  • 现在使用Trollius版本0.3。

tornado.platform.twisted

  • TwistedIOLoop 现在工作在Python 3.3+(与Twisted 14.0.0+)。

tornado.simple_httpclient

  • simple_httpclient 更好地支持IPv6,默认情况下已启用。

  • 改进了默认密码套件选择(Python 2.7+)。

  • HTTP实现已经与 tornado.http1connection 中的 tornado.httpserver 统一

  • 流式请求主体现在通过 body_producer 关键字参数支持到 tornado.httpclient.HTTPRequest

  • tornado.httpclient.HTTPRequestexpect_100_continue 关键字参数允许使用HTTP Expect: 100-continue 功能。

  • simple_httpclient 现在在更多情况下引发原始异常(例如 IOError),而不是将一切都转换为 HTTPError

tornado.stack_context

  • 当没有堆栈上下文活动时,堆栈上下文系统现在具有较少的性能开销。

tornado.tcpclient

  • 创建TCP连接和IOStreams的新模块,包括名称解析,连接和SSL握手。

tornado.testing

  • AsyncTestCase 现在尝试检测作为生成器但不使用 @gen_test 或任何类似装饰器运行的测试方法(这将先前导致测试静默地被跳过)。

  • 当测试超时时,将显示更好的堆栈跟踪。

  • @gen_test 装饰器现在通过 *args, **kwargs,所以它可以用于带参数的函数。

  • 修复了在Python 3上安装 unittest2 时的测试套件。

tornado.web

  • 现在可以使用 stream_request_body 装饰器和新的 RequestHandler.data_received 方法来支持流请求体。

  • 如果没有回调,RequestHandler.flush 现在返回 Future

  • 可能会引发新的异常 Finish 以完成请求,而不会触发错误处理。

  • 当启用gzip支持时,所有 text/* MIME类型都将被压缩,而不仅仅是白名单上的那些。

  • Application 现在实现 HTTPMessageDelegate 接口。

  • StaticFileHandler 中的 HEAD 请求不再读取整个文件。

  • StaticFileHandler 现在向客户端传输响应主体。

  • 新设置 compress_response 替换现有的 gzip 设置;两个名称都被接受。

  • 不再由此模块生成的XSRF Cookie(即没有任何特定格式的字符串)再次被接受(只要cookie和主体/头匹配)。这种模式是常见的测试和非浏览器客户端,但被破坏了Tornado 3.2.2的变化。

tornado.websocket

  • 默认情况下,来自其他原始站点的WebSocket连接现在被拒绝。浏览器不对WebSocket连接使用同源策略,而是对大多数其他浏览器启动的通信使用同源策略。这可能是令人惊讶的和安全风险,因此我们默认在服务器端禁止这些连接。要接受跨源WebSocket连接,请覆盖新方法 WebSocketHandler.check_origin

  • WebSocketHandler.closeWebSocketClientConnection.close 现在支持 codereason 参数,在关闭时向连接的另一端发送状态代码和消息。当另一侧关闭时,这两个类都有 close_codeclose_reason 属性来接收这些值。

  • C加速模块现在可以使用MSVC正确构建,并且可以支持64位系统上大于2GB的消息。

  • 用于检测缺少的C编译器的回退机制现在可以在Mac OS X上正常工作。

  • WebSocketHandler.open 的参数现在以与 RequestHandler.get 和类似方法的参数相同的方式解码。

  • 现在允许在 WebSocketHandler 中覆盖 prepare,并且此方法可以以常用方式生成HTTP响应(错误页)。一旦WebSocket握手完成,仍然不允许HTTP响应方法。

tornado.wsgi