收到服务器发送事件,立即捕获到一个错误,导致SSE关闭 - javascript

我已经为我的spring-boot应用程序实现了一个端点,该端点返回一个服务器发送的事件,我向该事件发送了一个简单的字符串几次。对此端点发出请求后,它将打开,然后发生错误。我发送的字符串似乎没有到达前端。

这是控制器:

@RequestMapping("/sseTest")
@Async
public ResponseBodyEmitter handleRequest() {
    final SseEmitter emitter = new SseEmitter();
    ExecutorService service = Executors.newSingleThreadExecutor();
    service.execute(() -> {
        for (int i = 0; i < 500; i++) {
            try {
                emitter.send(123 , MediaType.TEXT_PLAIN);
                Thread.sleep(200);
            } catch (Exception e) {
                e.printStackTrace();
                emitter.completeWithError(e);
                return;
            }
        }
        emitter.complete();
    });
    return emitter;
}

以及处理请求的前端代码:

const eventSource = new EventSource('http://localhost:8080/sseTest');
eventSource.onopen = e => console.log('open');
eventSource.onerror = e => {
    if (e.readyState == EventSource.CLOSED) {
        console.log('close');
    } else {
        console.log(e);
    }
};
eventSource.onmessage = event => {
console.log(event.data);
};

控制台记录以下内容:

open
Event {type: "error"}

事件已打开,但随后立即报告错误。

参考方案

我有一个类似的问题。我创建了一个自定义过滤器,因此它会要求添加异步支持。

自定义过滤器-

@WebFilter(urlPatterns="/*")
@Component
public class SessionFilter implements Filter {

它弹出的错误是-

java.lang.IllegalStateException:必须在Servlet上以及对异步请求处理中涉及的所有过滤器启用异步支持。这是通过Java代码使用Servlet API或通过在Web.xml中的Servlet和过滤器声明中添加“ true”来完成的。

我删除了自定义过滤器。它就像一个魅力。

javascript popupwindow之后的行如何工作? - javascript

好的,我有一个来自后面代码的方法,可以创建一个popupwindow。然后有一行代码要在那之后执行,我想知道那行代码何时执行,是在使用popupwindow之后执行还是在创建popupwindow之后执行?例如:void exPopupWindowMethod() { string scr = "window.open('exampleP…

Java / Javascript-从客户端获取IP - java

我正在使用java playframework2,但似乎无法获得正确的IP地址。每次请求后,它都会不断变化。我的意思是,流量分析网站在标头中实现javascript来分析您的流量,因此使用javascript应该可以吗?如果框架不提供此类功能,是否还有其他方法可以从客户端获取IP?我想建立一个访客计数器,但是它应该只统计唯一身份的访客。也许我不必使用IP地址…

Javascript-Urls的奇怪字符串比较行为 - javascript

最近,在编写我无法理解的javascript时遇到了字符串比较的问题。我从完全相同的网址创建了两个字符串,当我比较它们时返回false,但是在重新分配相同的字符串后,比较返回true。这是我的示例:var str1 = "http://google.com/"; var str2 = "http://google.com‏/&#…

用于客户端通知的AMQP或XMPP - java

我正在设计一个自定义消息传递系统的替代品,该系统目前用于从服务器端(Java)通知JavaScript Web应用程序有关更改的内容。该旧版消息传递系统通过使用基于自定义文本的协议和纯Java套接字,通过Flash XMLSocket进行工作。替换将不仅由Web应用程序(通过Web套接字而不是Flash)使用,而且还将由用C#编写的其他桌面客户端应用程序使用…

Javascript-从当前网址中删除查询字符串 - javascript

单击提交按钮后,我需要从网址中删除查询字符串值。我可以用jQuery做到这一点吗?当前网址:siteUrl/page.php?key=value 页面提交后:siteUrl/page.php 实际上,我已经从另一个带有查询字符串的页面着陆到当前页面。我需要在页面首次加载时查询字符串值以预填充一些详细信息。但是,一旦我提交了表格,我就需要删除查询字符串值。我已…