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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 2d183fe199fac8d788e78ce9d9438374381502f6a7d1f08a7754b59cb8bad172 |
|
MD5 | 3a3bc0b3466ec2457b49c4a21c4b883f |
|
BLAKE2b-256 | 1b78cc30012caebe7e6015478d64cbcb3ed4847dc61398ae99a9070a446fc17c |