【问题标题】:Flux + Server Side EventsFlux + 服务器端事件
【发布时间】:2018-05-28 15:04:45
【问题描述】:

我熟悉Spring Flux + SSE,尝试编写一些流数据的代码。

这里有两个问题:

  1. 当我在 Chrome 中发出请求时,它没有关闭连接 一段时间(加载圈正在旋转),但我正在使用常规 Flux.fromIterable 在数组末尾发出完整的信号。
  2. 它会关闭一段时间(大约 1 分钟)。可能它在某个地方超时。只有在OnComplete 事件触发时才应关闭响应。

    @Controller("/")
    @Validated
    public class HelloController {
    
        @Produces(MediaType.TEXT_EVENT_STREAM) // add 'application/stream+json'
        @Get("/hello/{name}")
        public Flux<Hello> hello(@NotBlank String name) {
    
            List<Hello> list = new ArrayList<>();
    
            list.add(new Hello("test1", 1));
            list.add(new Hello("test2", 2));
    
            return Flux.fromIterable(list).doOnComplete(() -> {
                System.out.println("response should be closed here!");
            });
        }
    }
    

-另外请添加对application/stream+json 内容类型的支持

-并通过 Flux 支持客户端的服务器端事件。

【问题讨论】:

    标签: micronaut


    【解决方案1】:

    据我所知,内容类型 application/stream+json 不是官方媒体类型。有一个草稿试图注册这种类型,但它与活动流有关https://tools.ietf.org/id/draft-snell-activity-streams-type-01.html

    测试https://github.com/micronaut-projects/micronaut-core/commit/b71f63aa8f2b2f00bdcbc25e60d9112321d8f003#diff-29dce542bb2e6326257895b376220c1aR16

    演示使用 MediaType.APPLICATION_JSON_STREAM 实现的用例,类型为 application/x-json-stream

    至于为什么 chrome 一直在旋转,这是因为 Micronaut 实现了 keep alive 并保持连接处于活动状态以满足进一步的请求

    猜你喜欢
    • 1970-01-01
    • 2023-03-20
    • 2011-05-27
    • 1970-01-01
    • 1970-01-01
    • 2012-12-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多