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()使用
新特性¶
Tornado循环引擎¶
在进行nodejs集成的时候,我们意识到,与我们过去相信的相反,Tornado (Python中一个异步、基于回调的模块) 在uWSGI中是可用的。
注意:该插件默认不内置
官方文档: Tornado循环引擎
‘puwsgi’协议¶
添加了’uwsgi’解析器的一个”持久化” (keep-alive)版本,名字为’puwsgi’ (持久化uwsgi)。
这个协议只对没有请求体的请求有用,并且需要来自前端的支持。它目前用于自定义客户端/应用上,没有web服务器处理程序支持它。
--puwsgi-socket <addr>
将绑定一个puwsgi socket到指定的地址上
–vassal-set¶
你可以使用–set,告诉Emperor传递指定选项给每个vassal:
[uwsgi]
emperor = /etc/uwsgi/vassals
vassal-set = processes=8
vassal-set = enable-metrics=1
这会添加 --set processes=8
和 --set enable-metrics=1
到每个vassal
‘template’转换¶
这是一个允许你应用所有的内部路由模式到你的响应上的转换。
以下面的文件为例 (foo.html)
<html>
<head>
<title>Running on ${SERVER_NAME}</title>
</head>
<body>
Your ip address is: ${REMOTE_ADDR}<br/>
Served requests: ${metric[worker.0.requests]}<br/>
Pid: ${uwsgi[pid]}<br/>
A random UUID: ${uwsgi[uuid]}
</body>
</html>
我们将在它上面应用’template’转换:
[uwsgi]
http-socket = :9090
; enable the metrics subsystem
enable-metrics = true
; inject the route transformation
route-run = template:
; return a file (transformation will be applied to it)
route-run = file:filename=foo.html,no_content_length=1
内部路由子系统中任何可用的东西都能用在’template’转换上。
性能是不错的,因此,你或许想要试着使用它,来代替老式的服务器端包含(Server Side Includes)。
不够?将其与缓存结合在一起:
[uwsgi]
http-socket = :9090
; enable the metrics subsystem
enable-metrics = true
; load foo.html in the cache
cache2 = name=mycache,items=10
load-file-in-cache = foo.html
; inject the route transformation
route-run = template:
; return the cache item (transformation will be applied to it)
route-run = cache:key=foo.html,no_content_length=1
再来?
加上分块编码?
[uwsgi]
http-socket = :9090
; enable the metrics subsystem
enable-metrics = true
; load foo.html in the cache
cache2 = name=mycache,items=10
load-file-in-cache = foo.html
; inject the route transformation
route-run = template:
; inject chunked encoding
route-run = chunked:
; return the cache item (transformation will be applied to it)
route-run = cache:key=foo.html,no_content_length=1
或者gzip ?
[uwsgi]
http-socket = :9090
; enable the metrics subsystem
enable-metrics = true
; load foo.html in the cache
cache2 = name=mycache,items=10
load-file-in-cache = foo.html
; inject the route transformation
route-run = template:
; inject gzip
route-run = gzip:
; return the cache item (transformation will be applied to it)
route-run = cache:key=foo.html,no_content_length=1