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

继续阅读