4

我有两个简单的控制器:

@GetMapping(value = "/simple-get")
public String simpleGet() {
    return "simple Get";

}

@GetMapping(path = "/stream-flux", produces = MediaType.TEXT_EVENT_STREAM_VALUE)
public Flux<String> streamFlux() {
    return Flux.interval(Duration.ofSeconds(2))
            .map(sequence -> "Flux - " + LocalTime.now().toString());
}

调用第一个时,它按预期工作(本地和远程使用不同机器的 ip)。但是当调用第二个时,它使用本地主机按预期工作,例如:http://localhost:65465/stream-flux 但是当使用它的 ip 部署到另一台机器时它不能远程工作。我什至检查了一下,当使用 127.0.0.1 时它在本地无法正常工作,这很奇怪.. 所有不适用于 web-flux 的东西,都可以通过 simple-get API 正常工作,所以我排除了连接问题.. 可以在任何地方都找不到任何关于它的东西.. 对此有任何想法将不胜感激。

4

1 回答 1

3

感谢所有有兴趣提供帮助的人。经过进一步调查,我们发现了 RC,它实际上与 code/Spring-web-flux 无关。使用 ip 地址或远程调用它时,请求一直处于挂起状态,直到达到服务器上定义的超时。在 Windows 机器上使用 netstat -ano | 在 cmd 上 findstr 8080 我们能够找到正在使用的端口及其状态。当使用本地主机时,对 api 的第一次调用会分配一个额外的端口来建立一个连接,该连接将为以后的服务器发送事件保持打开状态,我们可以看到正在侦听该新端口的进程的 PID 是浏览器。使用 IP 地址时。同样的事情正在发生,但现在正在侦听新端口的进程实际上是防病毒程序。

更多细节:

https://community.sophos.com/free-antivirus-tools-for-desktops/f/discussions/5750/sophos-av-blocks-server-sent-events-sse-on-mac-os-x-yosemite

JavaScript EventSource SSE 未在浏览器中触发

使用 https 应该可以解决问题。

谢谢

于 2020-10-21T08:24:29.020 回答