[Python] Python 的 ASGI 服务器在调用 loop.sendfile 时客户端无法收到数据

最近对比了各种 ASGI 服务器,发现当前的几个 ASGI 服务器中 ,hypercorn 的完成度是最高的,http 支持到 3,ASGI 扩展也支持了两个,可惜 Zero Copy Send 目前还没支持,当时就想对他加入这个的支持,如果成功,这也是第一个支持全部 ASGI 扩展的 ASGI 服务器,然而 hypercorn 原作者似乎最近没空,我就自己 fork 了个,主要代码在这,https://gitlab.com/synodriver/hypercorn/-/blob/zerocopy/src/hypercorn/asyncio/tcp_server.py#L106,
但是测试中发生了问题,在 debian 上 Errno32 Brokenpipe,在 win 上客户端也是收不到数据,似乎一旦调用 loop.sendfile,对面就关闭了连接。有对 ASGI 协议和服务器有研究的大佬可以帮忙看看吗?

这是我用的测试 code

async def app2(scope, receive, send): if scope["type"] == "http" and scope["path"] == "/": await send({"type": "http.response.start", "status": 200, "headers": [(b"Content-Type", b"image/png"), (b"Cache-Control", b"no-cache")]}) f = open(r"test.jpg", "rb") await send({"type": "http.response.zerocopysend", "file": f.fileno()})

发表回复

您的电子邮箱地址不会被公开。