response 如何通过多次flush往前端输出值

问题如下,前端会调用后台接口进行调用扫描仪,扫描仪每过一张纸都会执行一次回调,我想在扫描仪过纸回调后,将图片实时返回给前端
以下是模拟代码

    @GetMapping("/flush")
    public void flush(HttpServletResponse response) throws Exception {
        response.setHeader("Transfer-Encoding","chunked");
        //调用扫描仪,进行扫描
        scan.doScan(base64->{
            //扫描仪过纸回调,需要把图片实时返回给前端,避免前端阻塞过久
            ServletOutputStream outputStream = response.getOutputStream();
            outputStream.write((i+"\n").getBytes());
            outputStream.flush();
        })
    }
    

问题来了。前端如何获取后台每次flush的数据。尝试了很久,除非接口方法执行完才会回调,这并不符合我的需要,求一个原始js实现方案

可以了解一下WebSocket协议,建立连接后,服务端可以主动给前端发数据,前端只需要监听服务端发来的数据即可,避免前端不断轮训调用后端接口和等待。

最简单的方式,改变http 的mediatype使用stream响应即可,reactive实现的webflux这种就可以做到

  • 可以使用long pulling技术
  • 当没有过纸的时候,把前端请求hold住
  • 当过纸的时候,把hold住的请求取出来,立马响应给前端

如有帮助,请采纳,十分感谢!