Page 1 of 1

Ray Serve WebSocket -Bereitstellung: "ASGI Callable zurückgegeben, ohne Handshake -Fehler zu senden" Fehler für mehr als

Posted: 04 Feb 2025, 12:41
by Guest
Ich entwickle einen Fastapi WebSocket -Server, der mit Ray Serve bereitgestellt wird, um mehrere WebSocket -Verbindungen zu bearbeiten. Die Anwendung ist so konzipiert, dass sie eine Echtzeit-Kommunikation mit bis zu 50.000 gleichzeitigen Benutzern ermöglicht. Nach der Integration von Ray, der für die Multiprozessierung integriert wurde, stoße ich jedoch auf ein Problem: < /p>
Die Anwendung funktioniert wie erwartet für die ersten 5 Benutzer. Der folgende Fehler: < /p>

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/user/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/user/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/user/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/user/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/user/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>
Code: Hauptanwendung mit Ray Serve -Bereitstellung: < /p>
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
< /code>
WebSocket-Manager:
Ein redisbasiertes WebSocket-Manager für die Verfolgung von Verbindungen. Servieren oder Fastapi, dass ich fehlt? Status? < /p>
Was ich ausprobiert habe: < /p>
Verifizierte Redis -Verbindung und aktive WebSocket -Verwaltungslogik. Erhöhte http_options 
in serv.start () :

Code: Select all

serve.start(http_options={
"host": "0.0.0.0",
"port": 8000,
"keep_alive_timeout": 60,
"max_keep_alive_requests": 10
})