我正在尝试使用aiohttp来制作一种高级反向代理
我想获取HTTP请求的内容,并将其传递给新的HTTP请求,而无需将其拉入内存。虽然只有上游,但任务相当简单:aiohttp服务器以StreamReader
的形式返回请求内容,而aiohttp客户端可以接受StreamReader
作为请求主体
问题是,我想将原始请求发送到几个上游,或者,例如,同时将内容发送到上游并将其写入磁盘
是否有一些工具可以播放StreamReader
的内容
我曾尝试制作一些天真的广播,但在大型对象上失败了。我做错了什么
class StreamBroadcast:
async def __do_broadcast(self):
while True:
chunk = await self.__source.read(self.__n)
if not chunk:
break
for output in self.__sinks:
output.feed_data(chunk)
for output in self.__sinks:
output.feed_eof()
def __init__(self, source: StreamReader, sinks_count: int, n: int = -1):
self.__source = source
self.__n = n
self.__sinks = [StreamReader() for i in range(sinks_count)]
self.__task = asyncio.create_task(self.__do_broadcast())
@property
def sinks(self) -> Iterable[StreamReader]:
return self.__sinks
@property
def ready(self) -> Task:
return self.__task
嗯,我查看了
asyncio
源代码,发现我应该使用Transport
在流上泵送数据。这是我的解决办法希望有一次我会把它打包到pip模块
相关问题 更多 >
编程相关推荐