Infrastructure
WebSocket
Протокол двунаправленной постоянной связи между клиентом и сервером для real-time приложений.
Что такое WebSocket
WebSocket — протокол, создающий постоянное двунаправленное TCP-соединение между клиентом и сервером. В отличие от HTTP (запрос → ответ), WebSocket позволяет обеим сторонам отправлять сообщения в любой момент без overhead нового HTTP-соединения.
Для ML применяется в:
- Real-time голосовых интерфейсах — непрерывный поток аудио и ответов
- Интерактивных нотбуках — JupyterLab использует WebSocket
- Streaming LLM с bi-directional прерываниями — пользователь может прервать генерацию
HTTP SSE vs WebSocket для LLM стриминга
| Server-Sent Events (SSE) | WebSocket | |
|---|---|---|
| Направление | Только сервер → клиент | Двунаправленный |
| Протокол | HTTP | WS (TCP over Upgrade) |
| Сложность | Простой | Немного сложнее |
| Применение для LLM | Стандарт (OpenAI API) | Голос, прерывания |
| Поддержка браузеров | Нативная | Нативная |
Пример: WebSocket стриминг
# Сервер (FastAPI)
from fastapi import FastAPI, WebSocket
app = FastAPI()
@app.websocket("/ws/chat")
async def chat_ws(websocket: WebSocket):
await websocket.accept()
while True:
user_message = await websocket.receive_text()
async for token in model.stream(user_message):
await websocket.send_text(token)
# Клиент (Python)
import asyncio, websockets
async def chat():
async with websockets.connect("ws://localhost:8000/ws/chat") as ws:
await ws.send("Привет!")
async for token in ws:
print(token, end="", flush=True)
Связанные термины
Готовы запустить GPU-задачу?
Запустить GPU-сервер