我需要创建一个 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 响应对象。我认为,线程可能会解决这个问题,其中每个线程都维护自己的响应对象。