FastAPI/Starlette 长连接感知断开
💡
原文中文,约900字,阅读约需3分钟。
📝
内容提要
FastAPI/Starlette长连接感知断开。之前写过如何在服务器重启时感知长连接,最近发现折腾复杂了。测试代码发现,去掉try...except asyncio.CancelledError,代码也能正常运行,不会报错。但是如果有打开的数据库连接,不会中断也不会回收。加上try...except asyncio.CancelledError,能捕获错误并处理善后。不知道是uvicorn的特性还是ASGI都这样。
🎯
关键要点
- FastAPI/Starlette可以感知长连接的断开。
- 之前的实现方式复杂,最近发现可以简化。
- 测试代码中去掉try...except asyncio.CancelledError后,代码仍能正常运行。
- 如果有打开的数据库连接,去掉try...except会导致连接不会中断或回收。
- 加上try...except asyncio.CancelledError可以捕获错误并进行善后处理。
- 不确定这是uvicorn的特性还是ASGI的普遍特性。
➡️