What’s new in Tornado 4.0

July 15, 2014

Highlights

Backwards-compatibility notes

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

  • 现在,Tornado依赖于certifi软件包,而不是捆绑自己的Mozilla CA列表副本. 使用pipeasy_install时,它将自动安装.

  • 此版本包括对安全cookie格式的更改,该更改首先在3.2.1版本中引入,并且在xsrf令牌中在3.2.2版本中进行了更改. 如果要从早期版本升级,请参阅那些版本的发行说明.

  • 现在默认情况下拒绝来自其他原始站点的WebSocket连接. 要接受跨域websocket连接,请重写新方法WebSocketHandler.check_origin .

  • WebSocketHandler no longer supports the old draft 76 protocol (this mainly affects Safari 5.x browsers). Applications should use non-websocket workarounds for these browsers.

  • 替代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 .

Other notes

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

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

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

tornado.auth

  • 修复了Python 3上.FacebookMixin的错误

  • 使用Future接口时,异常可以更可靠地传递给调用方.

tornado.concurrent

tornado.curl_httpclient

  • curl_httpclient现在在response.reason传递HTTP"原因"字符串.

tornado.gen

  • 协程的性能已得到改善.

  • StackContexts默认不再生成StackContexts ,但是将在需要时根据需要创建它们.

  • 在使用Futurestornado.gen模块的内部已进行了重写,以提高性能,但代价是旧的YieldPoint接口的性能会有所下降.

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

  • 可以产生新的对象moment ,以允许IOLoop在恢复之前运行一次迭代.

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

tornado.http1connection

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.simple_httpclient中的tornado.http1connection统一.

  • 现在支持Transfer-Encoding: chunked对请求正文进行Transfer-Encoding: chunked .

  • 现在支持Content-Encoding: gzip如果将decompress_request=True传递给HTTPServer构造函数,则为请求主体提供Content-Encoding: gzip .

  • 现在已记录HTTPServerRequestconnection属性以供公共使用; 应用程序应通过HTTPConnection接口编写其响应.

  • 现在不推荐使用HTTPServerRequest.writeHTTPServerRequest.finish方法. ( 不建议使用RequestHandler.writeRequestHandler.finish ;这仅适用于HTTPServerRequest上的方法)

  • 除旧的request_callback接口外, HTTPServer现在还支持HTTPServerConnectionDelegate . 委托接口支持请求主体的流传输.

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

  • 新的构造函数max_header_size变量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_tls转换的IOStream一个SSLIOStream .

  • No longer gets confused when an IOError or OSError without an errno attribute is raised.

  • 现在, BaseIOStream.read_bytes接受partial关键字参数,该参数可用于在读取全部金额之前返回. 这是streaming_callback的更友好的协程选择.

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

  • IOStream不需要数据来满足挂起的读取,则不再将其从套接字读取到内存中. 副作用是,如果另一端在缓冲区中有未消耗数据的情况下关闭连接,则不会立即运行close回调.

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

  • IOStream构造函数采用新的关键字参数max_write_buffer_size (默认为无限制). 如果未发送的缓冲数据量超过此限制,则对BaseIOStream.write调用将引发StreamBufferFullError .

  • ETIMEDOUT错误不再记录. 如果您需要将超时与其他形式的关闭连接区分开, stream.error从关闭回调中检查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.httpserver中的tornado.http1connection统一.

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

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

  • simple_httpclient现在会在更多情况下IOError原始异常(例如IOError ),而不是将所有内容都转换为HTTPError .

tornado.stack_context

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

tornado.tcpclient

  • New module which creates TCP connections and IOStreams, including name resolution, connecting, and SSL handshakes.

tornado.testing

  • AsyncTestCase现在尝试检测生成器但未使用@gen_test或任何类似装饰器运行的测试方法(这以前会导致测试被@gen_test声息地跳过).

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

  • @gen_test装饰器现在传递*args, **kwargs因此可以在带有参数的函数上使用.

  • Fixed the test suite when unittest2 is installed on Python 3.

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 connections from other origin sites are now rejected by default. Browsers do not use the same-origin policy for WebSocket connections as they do for most other browser-initiated communications. This can be surprising and a security risk, so we disallow these connections on the server side by default. To accept cross-origin websocket connections, override the new method WebSocketHandler.check_origin.

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

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

  • 现在,用于检测缺少的C编译器的后备机制在Mac OS X上可以正常工作.

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

  • It is now allowed to override prepare in a WebSocketHandler, and this method may generate HTTP responses (error pages) in the usual way. The HTTP response methods are still not allowed once the WebSocket handshake has completed.

tornado.wsgi

  • 新类WSGIAdapter支持以与Tornado的非WSGI HTTPServer更兼容的方式在WSGI服务器上运行Tornado Application . 不推荐使用WSGIApplication ,而建议将WSGIAdapter与常规Application .

  • WSGIAdapter现在支持压缩输出.