uWSGI 1.9.19

更改日志 [20131109]

此版本为uWSGI 2.0 (定于2013年12月底)启动“固化”周期。

度量子系统是缺失的最后一块,而这个版本 (经过1年的分析之后) 最终包含了它。

在接下来的2个月内,我们将开始弃用那些不感冒的、已知不能用的或者就被更现代/高级的所取代的特性或插件。

目前,计划删除下列插件和功能:

  • Go插件,由gccgo取代。 (如果fork()支持发生了某些改变,那么最终将会恢复这个Go插件)
  • 自动快照,从未被公开过,它具有大量的极端情况错误,并且非常复杂。 MasterFifo 添加的特性允许对自动快照更好的实现。

待定:

  • erlang插件超级老,设计糟糕,应该被完全重写。如果你是其用户之一,那么请求联系工作人员。非常有可能我们会在没有赞助的情况下不能对其进行维护。
  • matheval支持很快将会被移除 (除非我们发现了某些需要它的特定使用),用选项解析器中直接实现的某种形式的简单运算来取代它
  • admin插件应被某些更高级的所取代。一个用于定义动态选项的API正在进行中

错误修复

  • 在非root情况下,完全跳过cgroups初始化
  • 由Riccardo Magliocchetti负责的大量post静态分析修复
  • 修复greenlet插件引用计数
  • 避免统计信息推送器线程的kevent风暴
  • 修复rbtimers计算
  • ‘cache’和’file’路由器都有一个’no_content_length’关键选项来避免设置Content-Length头
  • PyPy插件自动启用线程/GIL
  • 管理HTTP解析器中的dot_segments
  • 改进srand()使用

新特性

度量子系统

这是uWSGI 2.0之前缺失的最后一块。度量子系统允许你存储与监控、绘图和质量检测相关的“数字”,并以多种方式导出。

官方文档: 度量(Metrics)子系统

Tornado循环引擎

在进行nodejs集成的时候,我们意识到,与我们过去相信的相反,Tornado (Python中一个异步、基于回调的模块) 在uWSGI中是可用的。

注意:该插件默认不内置

官方文档: Tornado循环引擎

‘puwsgi’协议

添加了’uwsgi’解析器的一个”持久化” (keep-alive)版本,名字为’puwsgi’ (持久化uwsgi)。

这个协议只对没有请求体的请求有用,并且需要来自前端的支持。它目前用于自定义客户端/应用上,没有web服务器处理程序支持它。

—puwsgi-socket <addr> 将绑定一个puwsgi socket到指定的地址上

–vassal-set

你可以使用–set,告诉Emperor传递指定选项给每个vassal:

  1. [uwsgi]
  2. emperor = /etc/uwsgi/vassals
  3. vassal-set = processes=8
  4. vassal-set = enable-metrics=1

这会添加 —set processes=8—set enable-metrics=1 到每个vassal

‘template’转换

这是一个允许你应用所有的内部路由模式到你的响应上的转换。

以下面的文件为例 (foo.html)

  1. <html>
  2. <head>
  3. <title>Running on ${SERVER_NAME}</title>
  4. </head>
  5. <body>
  6. Your ip address is: ${REMOTE_ADDR}<br/>
  7. Served requests: ${metric[worker.0.requests]}<br/>
  8. Pid: ${uwsgi[pid]}<br/>
  9. A random UUID: ${uwsgi[uuid]}
  10. </body>
  11. </html>

我们将在它上面应用’template’转换:

  1. [uwsgi]
  2. http-socket = :9090
  3. ; enable the metrics subsystem
  4. enable-metrics = true
  5. ; inject the route transformation
  6. route-run = template:
  7. ; return a file (transformation will be applied to it)
  8. route-run = file:filename=foo.html,no_content_length=1

内部路由子系统中任何可用的东西都能用在’template’转换上。

性能是不错的,因此,你或许想要试着使用它,来代替老式的服务器端包含(Server Side Includes)。

不够?将其与缓存结合在一起:

  1. [uwsgi]
  2. http-socket = :9090
  3. ; enable the metrics subsystem
  4. enable-metrics = true
  5. ; load foo.html in the cache
  6. cache2 = name=mycache,items=10
  7. load-file-in-cache = foo.html
  8. ; inject the route transformation
  9. route-run = template:
  10. ; return the cache item (transformation will be applied to it)
  11. route-run = cache:key=foo.html,no_content_length=1

再来?

加上分块编码?

  1. [uwsgi]
  2. http-socket = :9090
  3. ; enable the metrics subsystem
  4. enable-metrics = true
  5. ; load foo.html in the cache
  6. cache2 = name=mycache,items=10
  7. load-file-in-cache = foo.html
  8. ; inject the route transformation
  9. route-run = template:
  10. ; inject chunked encoding
  11. route-run = chunked:
  12. ; return the cache item (transformation will be applied to it)
  13. route-run = cache:key=foo.html,no_content_length=1

或者gzip ?

  1. [uwsgi]
  2. http-socket = :9090
  3. ; enable the metrics subsystem
  4. enable-metrics = true
  5. ; load foo.html in the cache
  6. cache2 = name=mycache,items=10
  7. load-file-in-cache = foo.html
  8. ; inject the route transformation
  9. route-run = template:
  10. ; inject gzip
  11. route-run = gzip:
  12. ; return the cache item (transformation will be applied to it)
  13. route-run = cache:key=foo.html,no_content_length=1

可用性

uWSGI 1.9.19于2013年11月09日发布

你可以从下面地址下载它:

http://projects.unbit.it/downloads/uwsgi-1.9.19.tar.gz