我需要创建一个将执行以下操作的python中间件:

a)接受来自多个客户端的http get / post请求.

b)修改这些请求并将其分发到后端远程应用程序(通过套接字通信).我对该远程应用程序没有任何控制权.

c)从后端应用程序接收处理后的结果,并将这些结果返回给发出请求的客户端.

现在,客户期望同步的请求/响应方案.但是后端应用程序不会同步返回结果.也就是说,某些请求比其他请求花费更长的时间.因此,

客户端1:发送http请求C1->得到响应R1

客户端2:发送http请求C2->得到响应R2

客户端3:发送http请求C3->得到回应R3

Python中间件按某种顺序接收它们:C2,C3,C1.按此顺序将它们调度到后端(作为非HTTP消息).后端以混合顺序R1,R3,R2的结果进行响应. Python中间件应将这些响应打包回http响应对象,并将响应发送回相关客户端.

是否有任何示例代码可以对这种行为进行编程.似乎有20种不同的python Web框架,我对于哪种方案最适合这种情况感到困惑(我希望尽可能轻量级……我会认为Django太重了……我尝试了bottle ,但我不确定如何针对这种情况进行编程).

===============================================

更新(基于下面的讨论):请求具有请求ID.响应具有响应ID(应与它们对应的请求ID相匹配).中间件和远程后端应用程序之间只有一个套接字连接.尽管我们可以维护{request_id:ip_address}字典,但问题是如何为正确的客户端构造HTTP响应对象.我认为,线程可以解决每个线程都维护自己的响应对象的问题.

解决方法:

螺丝框架.这正是07000的任务.此模块允许基于事件的网络编程:给定一组套接字,当其中任何一个数据就绪时,它将回调给定的处理程序.这样,线程就不必只是呆滞地等待一个套接字上的数据到达并将其痛苦地传递给另一个线程.您必须自己实现http处理,但是可以找到一些示例.另外,您可以使用uwsgi的异步功能,该功能允许您的应用程序与现有的Web服务器集成,但默认情况下不与asyncore集成-尽管并不难使其正常工作.取决于具体需求.