gpt4 book ai didi

Python 网络服务器 : How to serve requests asynchronously

转载 作者:太空宇宙 更新时间:2023-11-03 14:34:07 24 4
gpt4 key购买 nike

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

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

b) 修改这些请求并将其分派(dispatch)给后端远程应用程序(通过套接字通信)。我无法控制此远程应用程序。

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 网络框架,我很困惑哪一个最适合这种情况(我更喜欢尽可能轻量级的东西……我认为 Django 太重了……我试过 bottle ,但我不确定如何针对这种情况进行编程)。

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

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

最佳答案

螺丝框架。这正是 asyncore 的任务类型.该模块允许基于事件的网络编程:给定一组套接字,当其中任何套接字上的数据准备就绪时,它会回调给定的处理程序。这样一来,线程就没有必要只是愚蠢地等待一个套接字上的数据到达,然后痛苦地将它传递给另一个线程。您必须自己实现 http 处理,但可以在上面找到示例。或者,您可以使用 uwsgi 的异步功能,这将允许您的应用程序与现有的网络服务器集成,但默认情况下不与 asyncore 集成 --- 尽管使其工作并不难。视具体需求而定。

关于Python 网络服务器 : How to serve requests asynchronously,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4979575/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com