Spaces:
Running
Running
Merge pull request #323 from jlowin/add-timeout-graceful-shutdown
Browse files
src/fastmcp/server/server.py
CHANGED
|
@@ -826,16 +826,21 @@ class FastMCP(Generic[LifespanResultT]):
|
|
| 826 |
host: str | None = None,
|
| 827 |
port: int | None = None,
|
| 828 |
log_level: str | None = None,
|
|
|
|
| 829 |
) -> None:
|
| 830 |
"""Run the server using SSE transport."""
|
| 831 |
-
|
| 832 |
-
|
|
|
|
|
|
|
|
|
|
| 833 |
|
| 834 |
config = uvicorn.Config(
|
| 835 |
app,
|
| 836 |
host=host or self.settings.host,
|
| 837 |
port=port or self.settings.port,
|
| 838 |
log_level=log_level or self.settings.log_level.lower(),
|
|
|
|
| 839 |
)
|
| 840 |
server = uvicorn.Server(config)
|
| 841 |
await server.serve()
|
|
|
|
| 826 |
host: str | None = None,
|
| 827 |
port: int | None = None,
|
| 828 |
log_level: str | None = None,
|
| 829 |
+
uvicorn_config: dict | None = None,
|
| 830 |
) -> None:
|
| 831 |
"""Run the server using SSE transport."""
|
| 832 |
+
uvicorn_config = uvicorn_config or {}
|
| 833 |
+
# the SSE app hangs even when a signal is sent, so we disable the timeout to make it possible to close immediately.
|
| 834 |
+
# see https://github.com/jlowin/fastmcp/issues/296
|
| 835 |
+
uvicorn_config.setdefault("timeout_graceful_shutdown", 0)
|
| 836 |
+
app = RequestMiddleware(self.sse_app())
|
| 837 |
|
| 838 |
config = uvicorn.Config(
|
| 839 |
app,
|
| 840 |
host=host or self.settings.host,
|
| 841 |
port=port or self.settings.port,
|
| 842 |
log_level=log_level or self.settings.log_level.lower(),
|
| 843 |
+
**uvicorn_config,
|
| 844 |
)
|
| 845 |
server = uvicorn.Server(config)
|
| 846 |
await server.serve()
|