Springboot SseEmitter 超时

问题描述 投票:0回答:1

尝试执行以下 springboot SSE 代码:

@Controller
public class DataActivityController {
    @CrossOrigin
    @RequestMapping(value="/sse/mvc/emitter")
    public ResponseEntity<SseEmitter> handleRequest () {

        final SseEmitter emitter = new SseEmitter();
        ExecutorService service = Executors.newSingleThreadExecutor();
        service.execute(() -> {
            for (int i = 0; i < 1000; i++) {
                try {
                    emitter.send(i + " - ", MediaType.TEXT_PLAIN);

                    Thread.sleep(10);
                } catch (Exception e) {
                    e.printStackTrace();
                    emitter.completeWithError(e);
                    return;
                }
            }
            emitter.complete();
        });
        return new ResponseEntity(emitter, HttpStatus.OK);
    }
}

然后尝试使用以下方式从网络浏览器进行连接:

<script>
function sendRequest(){
    if(typeof(EventSource) !== "undefined") {
        var source = new EventSource("http://localhost:8080/sse/mvc/emitter");
        source.onmessage = function(event) {
        document.getElementById("sseDiv").innerHTML += event.data + " - ";
        };
    } else {
        document.getElementById("sseDiv").innerHTML =
                     "Your browser does not support server-sent events.";
    }
}
</script>

在浏览器上显示的结果: "timeout":null} - {"timeout":null} - {"timeout":null} - {"timeout":null} - {"timeout":null} - {"timeout" :null} - {“超时”:null}。

但是在springboot应用中并没有显示错误。

java spring spring-boot server-sent-events
1个回答
0
投票

您的脚本可能有问题。 SSE java代码似乎没问题。

SseEmitter emitter = new SseEmitter(-1L);

将此添加为发射器初始化语句。

© www.soinside.com 2019 - 2024. All rights reserved.