Spring boot 服务器无法响应同一会话的更多请求

Spring boot 服务器无法响应同一会话的更多请求,spring-boot,server-sent-events,spring-webflux,project-reactor,Spring Boot,Server Sent Events,Spring Webflux,Project Reactor,我有下面的事件流代码块: @RequestMapping(value = "/stream/{columnId}/data", produces = MediaType.TEXT_EVENT_STREAM_VALUE) @ResponseBody public Flux<Activity> streamingData(@PathVariable String columnId, HttpSession httpSession) { try {

我有下面的事件流代码块:

    @RequestMapping(value = "/stream/{columnId}/data", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
    @ResponseBody
    public Flux<Activity> streamingData(@PathVariable String columnId, HttpSession httpSession) {
        try {
            ColumnObject columnObject = streamHelper.findColumnObjectInListById(columnId);
            return streamHelper.getStreamData(httpSession.getId(), columnObject);
        } catch (Exception e) {
            ...
        }
    }
@RequestMapping(value=“/stream/{columnId}/data”,products=MediaType.TEXT\u EVENT\u stream\u value)
@应答器

公共流量

正如Marten Deinum所指出的,这是一个典型的硬限制:浏览器倾向于限制到给定域的并发连接数


如果您的应用程序需要大量多路复用,那么使用WebSocket可能是一个更好的选择,因为许多消息通道都建立在单个TCP连接上。

要绕过浏览器的这一限制,您可以使用HTTP/2上的服务器发送事件:HTTP/2提供了一种多路复用功能,可以绕过此HTTP/1问题。 有一篇关于这方面的优秀文章:


SpringBoot支持HTTP/2,但可能不是SpringWebFlux(至少在撰写本文时是Netty):

使用SSE over HTTP/2肯定是克服您所遇到的限制的最佳方法。您可以在此处找到更详细的信息:

这是一个硬浏览器限制。看见Spring在这里什么都没做,它是你的浏览器。谢谢你的评论。我理解。我的朋友,您如何提出解决方案@M.DeinumFix您的软件/找到不同的方法。浏览器根本无法处理更多的请求(甚至每个浏览器都不一样)。我认为你是对的。在事件流之前,我已经使用了WebSocket。但一旦开始使用Reactor API,事件流就更有意义了。事件流比websocket更容易管理。您可以看到上述控制器代码的示例。因此,我无法想象会出现这样的问题。SpringWebFlux也在考虑替代传输,是的,我一直在寻找你所说的。我认为唯一的解决办法就是解决软件问题。
@RequestMapping(value = "/session/metrics", method = RequestMethod.GET)
    public ResponseEntity<?> keepSessionAliveMetrics(HttpSession httpSession) {
        return new ResponseEntity<Void>(HttpStatus.OK); // STATE ONLY PENDING 
    }