Die Anwendung funktioniert für die ersten 5 Benutzer wie erwartet.
Wenn ein 6. Benutzer eine Verbindung herstellt, erhalte ich der folgende Fehler:
Code: Select all
ERROR: ASGI callable returned without sending handshake.
(ProxyActor pid=1264842) Task exception was never retrieved
(ProxyActor pid=1264842) future:
(ProxyActor pid=1264842) Traceback (most recent call last):
(ProxyActor pid=1264842) File "/home/[email protected]/miniconda3/envs/clonehub/lib/python3.11/site-packages/ray/serve/_private/proxy_response_generator.py", line 116, in _await_response_anext
(ProxyActor pid=1264842) return await self._response.__anext__()
(ProxyActor pid=1264842) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(ProxyActor pid=1264842) File "/home/[email protected]/miniconda3/envs/clonehub/lib/python3.11/site-packages/ray/serve/handle.py", line 559, in __anext__
(ProxyActor pid=1264842) replica_result = await self._fetch_future_result_async()
(ProxyActor pid=1264842) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
(ProxyActor pid=1264842) File "/home/[email protected]/miniconda3/envs/clonehub/lib/python3.11/site-packages/ray/serve/handle.py", line 280, in _fetch_future_result_async
(ProxyActor pid=1264842) raise RequestCancelledError(self.request_id) from None
(ProxyActor pid=1264842) ray.serve.exceptions.RequestCancelledError: Request e85273c8-f582-49a4-8dbe-0a86b464ad90 was cancelled.
(ProxyActor pid=1264842) Task exception was never retrieved
(ProxyActor pid=1264842) future:
(ProxyActor pid=1264842) Traceback (most recent call last):
(ProxyActor pid=1264842) File "/home/[email protected]/miniconda3/envs/clonehub/lib/python3.11/site-packages/uvicorn/protocols/websockets/websockets_impl.py", line 258, in run_asgi
(ProxyActor pid=1264842) self.send_500_response()
(ProxyActor pid=1264842) File "/home/[email protected]/miniconda3/envs/clonehub/lib/python3.11/site-packages/uvicorn/protocols/websockets/websockets_impl.py", line 222, in send_500_response
(ProxyActor pid=1264842) self.transport.write(b"".join(content))
(ProxyActor pid=1264842) File "uvloop/handles/stream.pyx", line 678, in uvloop.loop.UVStream.write
(ProxyActor pid=1264842) File "uvloop/handles/handle.pyx", line 159, in uvloop.loop.UVHandle._ensure_alive
(ProxyActor pid=1264842) RuntimeError: unable to perform operation on ; the handler is closed
Code: Select all
from fastapi import FastAPI, WebSocket
from ray import serve
app = FastAPI()
@serve.deployment
@serve.ingress(app)
class FastAPIDeployment:
def __init__(self):
self.connections = {}
@app.websocket("/ws")
async def websocket_endpoint(self, websocket: WebSocket):
await websocket.accept()
# Connection handling logic
Ein Redis-basierter WebSocket-Manager zum Verfolgen von Verbindungen.
Gibt es in Ray ein bekanntes Limit für gleichzeitige WebSocket-Verbindungen? Serve oder FastAPI, die mir fehlen?
Wie kann ich den Fehler „ASGI Callable zurückgegeben ohne Senden eines Handshakes“ debuggen und beheben?
Könnte dies mit dem WebSocket-Verbindungsstatus in Redis oder der Funktionsweise von Ray Serve zusammenhängen? verwaltet den Status?
Ich verwende: Python 3.11, ray[serve]==2.40.0, fastapi==0.115.5, uvicorn==0.32.1, asyncio==3.4. 3
Was ich versucht habe:
Überprüfte Redis-Verbindung und aktive WebSocket-Verwaltungslogik. Erhöhte http_options in Serve.start():
Code: Select all
serve.start(http_options={
"host": "0.0.0.0",
"port": 8000,
"keep_alive_timeout": 60,
"max_keep_alive_requests": 10
})