跳转到主要内容

a mongrel2 => wsgi gateway and helper tools

项目描述

本模块为Mongrel2网络服务器提供WSGI网关处理器,允许轻松部署Python应用程序在Mongrel2上。它提供了对分块响应编码、大文件上传的流式读取以及事件I/O插件后端的全面支持。

您可能还会发现其支持类在Python中开发非WSGI处理器时很有用。

命令行用法

使用此包最简单的方法是作为命令行启动器

m2wsgi dotted.app.name tcp://127.0.0.1:9999

这将连接到指定请求端口上的Mongrel2,并通过指定的WSGI应用程序处理请求。默认情况下,您将得到一个单独的线程处理所有请求,这可能不是您想要的;您可以增加线程数,如下所示

m2wsgi --num-threads=5 dotted.app.name tcp://127.0.0.1:9999

如果您不喜欢线程,可以启动几个指向同一zmq套接字的处理器实例,以获得相同的效果。更好的是,您可以使用eventlet来调整位,如下所示

m2wsgi --io=eventlet dotted.app.name tcp://127.0.0.1:9999

您还可以使用–io=gevent,如果您喜欢这种方式。欢迎为其他异步后端提供贡献。

程序性使用

如果您有更复杂的需求,您可以在应用程序中从m2wsgi中使用。主要类是‘WSGIHandler’,它提供了一个简单的服务器接口。上述命令行用法的等效方法是

from m2wsgi.io.standard import WSGIHandler
handler = WSGIHandler(my_wsgi_app,"tcp://127.0.0.1:9999")
handler.serve()

这里填写了很多“合理的默认值”。它假定Mongrel2接收套接字在发送套接字的下一个端口上,并且可以连接套接字而无需持久身份。

为了更精细地控制您的处理器与Mongrel2之间的连接,请创建您自己的连接对象。在这里,我们使用127.0.0.1:9999作为带有AA-BB-CC标识的发送套接字,并使用127.0.0.2:9992作为接收套接字。

from m2wsgi.io.standard import WSGIHandler, Connection
conn = Connection(send_sock="tcp://AA-BB-CC@127.0.0.1:9999",
                  recv_sock="tcp://127.0.0.1:9992")
handler = WSGIHandler(my_wsgi_app,conn)
handler.serve()

如果您为Mongrel2创建非WSGI处理器,以下类可能对您有用。

Connection:

表示您的处理器到Mongrel2的连接,通过它可以读取请求并发送响应。

Client:

表示连接到服务器的客户端,您可以在任何时候向其发送数据。

Request:

表示客户端请求,您可以在任何时候异步发送响应数据。

Handler:

是一个实现处理器的基类,其中不包含任何特定于WSGI的内容。

中间件

如果您需要向服务器添加高级功能,可以指定应应用于应用程序周围的其他WSGI中间件。例如,m2wsgi提供了一种gzip编码中间件,可用于压缩响应数据。

m2wsgi --middleware=GZipMiddleware
       dotted.app.name tcp://127.0.0.1:9999

如果您愿意牺牲WSGI兼容性以换取额外的压缩,您还可以在应用gzip之前在服务器内部进行一些缓冲。

m2wsgi --middleware=GZipMiddleware
       --middleware=BufferMiddleware
       dotted.app.name tcp://127.0.0.1:9999

默认的加载中间件的模块是m2wsgi.middleware;指定一个完整的点分名称以从另一个模块加载中间件类。

设备

此模块还提供了一些预构建的“设备”——设计用于执行特定常见任务的独立可执行文件。目前可用的设备有:

dispatcher:

实现了比标准mongrel2 PUSH套接字更灵活的请求路由方案。

response:

实现了简单的预设响应,具有从请求中插值变量的能力。

我们不是已经有了这样的东西吗?

是的,目前有几个现有的Mongrel2 WSGI网关

它们都没有完全满足我的需求。特别是,这个包具有对以下内容的透明支持:

  • 分块响应编码

  • 大“异步上传”请求的流式读取

  • 可插拔的IO后端(例如eventlet,gevent)

它也是从底层设计的专门针对Mongrel2。这意味着它获得了大量免费的功能,而且代码更简单、更轻量。

例如,没有像在CherryPy服务器中可能会找到的那样显式管理线程池和请求队列。相反,您只需启动所需数量的线程,让它们都连接到同一个处理器套接字,然后Mongrel2(通过zmq)将自动将请求负载均衡到它们。

同样,也没有复杂的master/worker进程排列来支持处理器的干净重载;您只需杀死旧的处理程序进程并启动一个新的。向m2wsgi发送SIGHUP,它将自动关闭并重生以进行干净的重新启动。

当前的问题、限制和待办事项

尽管它似乎大致上工作得很好,但还不是完美无缺的

  • 需要进行大量的测试!我必须找到耐心来编写必要的设置和拆解冗余。

  • 直接从mongrel2配置数据库获取连接细节将非常棒。也许有一个Connection.from_config方法,使用关键字通过处理器ID、主机、路由等选择连接。

  • 支持expect-100-continue;这可能需要在mongrel2中实现

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源分布

m2wsgi-0.5.2.tar.gz (40.8 kB 查看哈希值)

上传时间

由以下组织支持