Я разрабатываю сервер FastAPI WebSocket, развернутый с помощью Ray Serve для обработки нескольких соединений WebSocket. Приложение предназначено для обеспечения связи в режиме реального времени с до 50 тысячами одновременных пользователей. Однако после интеграции Ray Serve для многопроцессорной обработки я столкнулся с проблемой:
Приложение работает должным образом для первых 5 пользователей.
Когда подключается шестой пользователь, я получаю следующая ошибка:
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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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
Код: Основное приложение с развертыванием Ray Serve:
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
Менеджер WebSocket:
Менеджер WebSocket на базе Redis для отслеживания соединений.
Известен ли лимит на одновременные подключения WebSocket в Ray Serve или FastAPI, которого мне не хватает?
Как я могу отладить и устранить ошибку «Вызов ASGI возвращается без отправки рукопожатия»?
Может ли это быть связано с состоянием соединения WebSocket в Redis или как Ray Serve управляет состоянием?
Я использую: Python 3.11, ray[serve]==2.40.0, fastapi==0.115.5, uvicorn==0.32.1, asyncio== 3.4.3
Что я пробовал:
Проверенное соединение Redis и активная логика управления WebSocket. Увеличены параметры http_options в own.start():
serve.start(http_options={
"host": "0.0.0.0",
"port": 8000,
"keep_alive_timeout": 60,
"max_keep_alive_requests": 10
})
Подробнее здесь: https://stackoverflow.com/questions/793 ... g-handshak
Развертывание Ray Serve WebSocket: ошибка «Вызов ASGI возвращается без отправки рукопожатия» для более чем 5 подключений ⇐ Python
Программы на Python
1735926775
Anonymous
Я разрабатываю сервер FastAPI WebSocket, развернутый с помощью Ray Serve для обработки нескольких соединений WebSocket. Приложение предназначено для обеспечения связи в режиме реального времени с до 50 тысячами одновременных пользователей. Однако после интеграции Ray Serve для многопроцессорной обработки я столкнулся с проблемой:
Приложение работает должным образом для первых 5 пользователей.
Когда подключается шестой пользователь, я получаю следующая ошибка:
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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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/musab.rasheed@vaival.tech/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
Код: Основное приложение с развертыванием Ray Serve:
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
Менеджер WebSocket:
Менеджер WebSocket на базе Redis для отслеживания соединений.
Известен ли лимит на одновременные подключения WebSocket в Ray Serve или FastAPI, которого мне не хватает?
Как я могу отладить и устранить ошибку «Вызов ASGI возвращается без отправки рукопожатия»?
Может ли это быть связано с состоянием соединения WebSocket в Redis или как Ray Serve управляет состоянием?
Я использую: Python 3.11, ray[serve]==2.40.0, fastapi==0.115.5, uvicorn==0.32.1, asyncio== 3.4.3
Что я пробовал:
Проверенное соединение Redis и активная логика управления WebSocket. Увеличены параметры http_options в own.start():
serve.start(http_options={
"host": "0.0.0.0",
"port": 8000,
"keep_alive_timeout": 60,
"max_keep_alive_requests": 10
})
Подробнее здесь: [url]https://stackoverflow.com/questions/79326110/ray-serve-websocket-deployment-asgi-callable-returned-without-sending-handshak[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия