uWSGI 1.9.21

2.0(定于2013年12月30日)之前的最后一个1.9版本

从现在起,所有的版本都将-rc (将不会增加新功能)

一个描述从 (非常过时) 1.2 和 1.4版本起升级的注意事项的文档正在进行中。

这个版本包括一个直接嵌入到uWSGI二进制文件中的新的简化插件构建器子系统。

一个报告第三方插件的页面在这里: uWSGI第三方插件 (请随意添加你的插件)

然后现在……

更新日志 [20131211]

错误修复

  • 如果psgi streamer失败,则中止
  • 允许在raspberrypi上构建coroae
  • 不等待可写,除非严格要求
  • 在非异步模式下调用异步模式API时,避免段错误
  • 修复纯 (无挂起引擎) 异步模式
  • 在非x86 timerfd_create上,不显示错误
  • 支持 arm 上的timerfd_create/timerfd_settime

优化

用于第一个块的writev()

在内部发送第一个响应体时,uWSGI检查是否也发送了响应头,并最终使用额外的write()调用来发送它们。

这个新的优化允许uWSGI使用单个writev()系统调用来发送第一个响应体块。

如果writev()返回了第二个向量上不完整的写入,那么该系统将会回退到简单的write()。

对websockets传出数据包使用单个缓冲区

在这个补丁之前,需要为每个单一的websocket包分配一个内存块。

这个补丁强制重新使用单个动态缓冲区。这应该对响应有一个相当不错的提高。

新特性

已移除zeromq api

已移除zeromq api (实际上是一个单一的函数)。每个需要zeromq的插件可以简单调用zmq_init(),而不是uwsgi_zeromq_init()。

mongrel2支持已被移到’mongrel2’插件上。

uWSGI与mongrel2配对,可以使用跟之前一样的选项,只是记得要加载(和构建)mongrel2插件

新的共享区域

已重写共享区域子系统 (它与旧的API不兼容,因为它现在支持多内存区域了,因此它需要一个新的参数)。

看看已更新文档: SharedArea —— uWSGI组件间共享内存页

在写入器和读取器中报告请求数据

在从客户端读取/写入客户单时发生的每个错误将会报告当前请求数据。

这应该会大大简化调试

模块化日志块管理

已扩展uWSGI api,允许插件定义它们的日志请求变量。

看看: 格式化uWSGI请求日志

tmsecs 和 tmicros, werr, rerr, ioerr, var.XXX

有6个新的请求日志变量可以用了:

tmsecs: 报告当前unix实现,以毫秒为单位

tmicros: 报告当前unix实现,以微秒为单位

werr: 报告当前请求的写错误数

rerr: 报告当前请求的读错误数

ioerr: werr和rerr的总数

var.XXX: 报告请求变量XXX (例如var.PATH_INFO) 的上下文

symcall的挂载点和mule支持

已改进symcall插件,支持mule和挂载点。

要在一个mule中运行一个c函数,仅需将其指定为 —mule=foobar() 。当该mule发现有个参数以()结尾,它将会把它当成一个函数符号。

read2和wait_milliseconds异步钩子

这两个非阻塞钩子添加新的功能到非阻塞系统上。

第一个允许用同一个调用等待两个文件描述符 (目前只在纯异步模式下实现了它)

第二个用于进行毫秒级别的休眠。 (这个目前只被共享区域等待系统使用)

websockets二进制消息

你现在可以发送websockets二进制消息了。仅需使用 uwsgi.websocket_send_binary() 来代替 uwsgi.websocket_send()

‘S’ master fifo命令

发送’S’到master fifo,启用/禁用订阅包的发送

as-mule钩子

这个新的自定义钩子允许你在每个mule中执行自定义代码:

  1. [uwsgi]
  2. hook-as-mule = exec:myscript.sh
  3. ...

接收钩子和改进的链式重载

已改进链式重载子系统,以考虑worker何时真正准备好accept()请求。

此特定的状态也会被宣告到Emperor。

看看这篇文章,以获得更多信息: https://uwsgi-docs.readthedocs.io/en/latest/articles/TheArtOfGracefulReloading.html

–after-request-call

这个选项允许你在每个请求后调用指定的C函数 (链式)。虽然你应该为这种任务使用框架/接口特性,但是有时在日志记录阶段之后不可能执行代码。在这种情况下,随意使用该选项。

错误页面

3个新的选项允许你自定义错误页面 (仅限html):

—error-page-403 <file> 为受管理的403响应添加一个错误页面(html)

—error-page-404 <file> 为受管理的404响应添加一个错误页面(html)

—error-page-500 <file> 为受管理的500响应添加一个错误页面(html)

简化插件构建器

构建uWSGI插件现在超级简单:

  1. uwsgi --build-plugin <directory>

这个选项将会基于当前二进制创建一个健全的环境(无需使用构建配置文件和#ifdef),并且将会构建插件。

无需任何外部文件 (包括uwsgi.h),因为uWSGI二进制文件内置了它们。

2.0任务清单

  • 实现Lua中的websockets和sharedarea支持
  • 用于CPython, Perl, Ruby和PyPy的完整的sharedarea api
  • 在所有可用的循环引擎中实现read2和wait_milliseconds钩子

可用性

uWSGI 1.9.21于2013年12月11日发布

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

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