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的普遍特性。