[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"question-reactive-kak-realizovat-server-sent-events-sse-s-pomoshchyu-webflux":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":15,"progress":16,"seo":17},1001,"kak-realizovat-server-sent-events-sse-s-pomoshchyu-webflux",31,"reactive","Reactive","⚡","Как реализовать Server-Sent Events (SSE) с помощью WebFlux?","Server-Sent Events (SSE) — стандарт HTML5 для однонаправленной потоковой передачи данных от сервера к клиенту через HTTP. В отличие от WebSocket, SSE работает поверх обычного HTTP и поддерживает автоматическое переподключение браузером.\n\n### Простейший SSE-эндпоинт\n\n```java\n@RestController\npublic class SseController {\n\n    @GetMapping(value = \"\u002Fevents\", produces = MediaType.TEXT_EVENT_STREAM_VALUE)\n    public Flux\u003CString> streamEvents() {\n        return Flux.interval(Duration.ofSeconds(1))\n            .map(i -> \"Event #\" + i);\n    }\n}\n```\n\n### SSE с типизированными событиями\n\n```java\n@GetMapping(value = \"\u002Fnotifications\", produces = MediaType.TEXT_EVENT_STREAM_VALUE)\npublic Flux\u003CServerSentEvent\u003CNotificationDto>> streamNotifications() {\n    return notificationService.getNotifications()\n        .map(notification -> ServerSentEvent.\u003CNotificationDto>builder()\n            .id(notification.getId().toString())\n            .event(notification.getType())\n            .data(notification)\n            .retry(Duration.ofSeconds(5))\n            .build());\n}\n```\n\n\u003Cdetails>\u003Csummary>Реальный пример — лента обновлений с Sinks + SSE\u003C\u002Fsummary>\n\n```java\n@Service\npublic class UpdateService {\n    private final Sinks.Many\u003CUpdate> sink =\n        Sinks.many().multicast().onBackpressureBuffer(100);\n\n    public void publishUpdate(Update update) {\n        sink.tryEmitNext(update);\n    }\n\n    public Flux\u003CUpdate> getUpdates() {\n        return sink.asFlux();\n    }\n}\n\n@RestController\npublic class UpdateController {\n\n    private final UpdateService updateService;\n\n    @GetMapping(value = \"\u002Fupdates\u002Fstream\", produces = MediaType.TEXT_EVENT_STREAM_VALUE)\n    public Flux\u003CServerSentEvent\u003CUpdate>> stream() {\n        return updateService.getUpdates()\n            .map(update -> ServerSentEvent.builder(update)\n                .id(UUID.randomUUID().toString())\n                .event(\"update\")\n                .build());\n    }\n}\n```\n\n\u003C\u002Fdetails>\n\n### Клиент на JavaScript\n\n```javascript\nconst eventSource = new EventSource('\u002Fupdates\u002Fstream');\n\neventSource.addEventListener('update', (event) => {\n    const data = JSON.parse(event.data);\n    console.log('Получено обновление:', data);\n});\n\neventSource.onerror = (error) => {\n    console.error('SSE ошибка:', error);\n    \u002F\u002F Браузер автоматически переподключится\n};\n```\n\n### Частые ошибки\n\n- Не указать `produces = TEXT_EVENT_STREAM_VALUE` — клиент получит JSON-массив вместо потока\n- Отправлять слишком большие объекты — SSE предназначен для лёгких уведомлений\n- Забывать про CORS — SSE-запросы подчиняются политике CORS\n\n### Как используется в 2026\n\n- SSE — стандартный подход для push-уведомлений, дашбордов, live-лент\n- Для двунаправленного обмена — WebSocket, для однонаправленного — SSE\n- SSE хорошо работает с CDN и прокси (в отличие от WebSocket, требующего Upgrade)\n- В микросервисной архитектуре SSE используется совместно с Kafka\n\n> **На собеседовании:** покажите знание практической реализации: MediaType.TEXT_EVENT_STREAM_VALUE + Flux. Частая ошибка — путать SSE с WebSocket. SSE — однонаправленный (сервер -> клиент), работает поверх HTTP, браузер переподключается автоматически. WebSocket — двунаправленный, требует Upgrade.","","middle",[7],[],null,{"title":18,"description":19,"ogTitle":18,"ogDescription":20,"keywords":21,"schemaAnswer":22,"featuredSnippetReady":23},"Как реализовать Server-Sent Events (SSE) с помощью WebFlux? — Gymterview","Server-Sent Events (SSE) — стандарт HTML5 для однонаправленной потоковой передачи данных от сервера к клиенту через HTTP. В отличие от WebSocket, SSE работает п","Server-Sent Events (SSE) — стандарт HTML5 для однонаправленной потоковой передачи данных от сервера к клиенту через HTTP",[7,13],"Server-Sent Events (SSE) — стандарт HTML5 для однонаправленной потоковой передачи данных от сервера к клиенту через HTTP. В отличие от WebSocket, SSE работает поверх обычного HTTP и поддерживает автоматическое переподключение браузером.",true]