[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-ustroystvo-pk-i-seti-chto-takoe-websocket-i-chem-on-otlichaetsya-ot-http":3},{"id":4,"slug":5,"topicId":6,"topicSlug":7,"topicName":8,"topicEmoji":9,"question":10,"answer":11,"codeLang":12,"codeSrc":12,"important":12,"commonMistakes":12,"modernUsage":12,"difficulty":13,"tags":14,"related":21,"progress":22,"seo":23},237,"chto-takoe-websocket-i-chem-on-otlichaetsya-ot-http",7,"ustroystvo-pk-i-seti","Устройство ПК и сети","🖥️","Что такое WebSocket и чем он отличается от HTTP?","**WebSocket** — протокол прикладного уровня, обеспечивающий постоянное двунаправленное (full-duplex) соединение между клиентом и сервером поверх TCP. Определён в RFC 6455.\n\n> **Аналогия из жизни:** HTTP — это обмен письмами: вы отправляете вопрос, ждёте ответ. WebSocket — это телефонный звонок: связь установлена, и обе стороны могут говорить в любой момент, не дожидаясь друг друга.\n\n### Сравнение HTTP и WebSocket\n\n| Свойство | HTTP | WebSocket |\n|---|---|---|\n| Модель | Запрос-ответ (request-response) | Двунаправленный обмен (full-duplex) |\n| Инициатор | Только клиент отправляет запрос | Обе стороны могут отправлять сообщения в любой момент |\n| Соединение | Создаётся на каждый запрос (или keep-alive с ограничениями) | Постоянное, пока явно не закрыто |\n| Заголовки | В каждом запросе\u002Fответе | Только при установлении соединения (handshake) |\n| Протокол | `http:\u002F\u002F` \u002F `https:\u002F\u002F` | `ws:\u002F\u002F` \u002F `wss:\u002F\u002F` (шифрованный) |\n| Накладные расходы на сообщение | Высокие (заголовки 200+ байт в каждом сообщении) | Низкие (фрейм 2–14 байт) |\n| Направление данных | Сервер → клиент только в ответ на запрос | Сервер может отправлять данные в любой момент (push) |\n\n### Установление WebSocket-соединения (handshake)\n\nWebSocket начинается как обычный HTTP-запрос с заголовком `Upgrade`:\n\n**Запрос клиента:**\n```\nGET \u002Fchat HTTP\u002F1.1\nHost: example.com\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\nSec-WebSocket-Version: 13\n```\n\n**Ответ сервера:**\n```\nHTTP\u002F1.1 101 Switching Protocols\nUpgrade: websocket\nConnection: Upgrade\nSec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\n```\n\nПосле этого протокол переключается с HTTP на WebSocket, и обе стороны обмениваются лёгкими бинарными фреймами напрямую.\n\n### Когда использовать WebSocket\n\n- Чаты, мессенджеры\n- Уведомления в реальном времени (notifications, alerts)\n- Онлайн-игры\n- Биржевые котировки, live-данные (финансовые терминалы)\n- Collaborative editing (совместное редактирование документов)\n- IoT — потоковые данные с устройств\n\n### Когда НЕ использовать WebSocket\n\n- Обычные CRUD-операции — REST\u002FHTTP достаточно и проще\n- Нечастые обновления — **SSE (Server-Sent Events)** проще для однонаправленного push от сервера к клиенту\n- Нет необходимости в двусторонней коммуникации — long polling может быть достаточен\n\n### Альтернативы WebSocket\n\n| Технология | Направление | Транспорт | Когда использовать |\n|---|---|---|---|\n| **WebSocket** | Двунаправленный | TCP | Чаты, игры, полный дуплекс |\n| **SSE (Server-Sent Events)** | Сервер → клиент | HTTP | Уведомления, ленты обновлений |\n| **Long Polling** | Запрос-ответ (имитация push) | HTTP | Простые случаи, совместимость |\n| **gRPC streaming** | Двунаправленный | HTTP\u002F2 | Микросервисы, высокая производительность |\n\n### Для Java-разработчика\n\n- **Spring WebSocket** — `@EnableWebSocket`, `WebSocketHandler` — низкоуровневый API\n- **Spring STOMP over WebSocket** — `@MessageMapping`, `@SendTo` — высокоуровневый pub\u002Fsub с поддержкой брокеров (RabbitMQ, ActiveMQ)\n- **Jakarta WebSocket API** — `@ServerEndpoint`, `@OnMessage` — стандартный Java EE API\n- Spring поддерживает **SockJS** как fallback для браузеров без WebSocket\n\n### Вывод\n\nWebSocket решает фундаментальное ограничение HTTP — невозможность сервера инициировать отправку данных клиенту. Он незаменим для приложений реального времени, но избыточен для обычных CRUD-операций.\n\n> **На собеседовании:** объясните, что WebSocket начинается как HTTP (Upgrade handshake), а затем переключается на собственный протокол. Покажите понимание, когда WebSocket нужен, а когда достаточно SSE или обычного HTTP. Часто спрашивают о практическом опыте с Spring WebSocket\u002FSTOMP.","","middle",[15,16,17,18,19,20],"real-time","сети","websocket","http","full-duplex","spring-websocket",[],null,{"title":24,"description":25,"ogTitle":26,"ogDescription":27,"keywords":28,"schemaAnswer":35,"featuredSnippetReady":36},"WebSocket vs HTTP — двунаправленное соединение в реальном времени — Gymterview","WebSocket — full-duplex протокол поверх TCP (RFC 6455). Отличия от HTTP: постоянное соединение, обе стороны отправляют, фрейм 2-14 байт. Handshake через HTTP Upgrade.","WebSocket vs HTTP — когда использовать двунаправленное соединение","WebSocket — full-duplex, постоянное соединение, фрейм 2-14 байт. HTTP — запрос-ответ, заголовки в каждом сообщении. WebSocket для чатов, уведомлений, live-данных.",[29,30,31,32,33,34],"WebSocket что это","WebSocket vs HTTP","WebSocket handshake","full-duplex протокол","ws wss","Spring WebSocket","WebSocket (RFC 6455) — протокол full-duplex двунаправленной связи поверх TCP. Отличия от HTTP: постоянное соединение (не запрос-ответ), обе стороны отправляют в любой момент, заголовки только при handshake (фрейм 2-14 байт), протокол ws:\u002F\u002F \u002F wss:\u002F\u002F. Устанавливается через HTTP Upgrade (101 Switching Protocols). Применяется для чатов, уведомлений, биржевых котировок.",true]