将事件源(服务器发送的事件)连接到服务器时出错

Error connecting EventSource (Server-sent event) to server

本文关键字:服务器 连接 事件 出错 事件源      更新时间:2023-09-26

>我正在尝试将JavaScript EventSource连接到Servlet。我有以下JavaScript代码:

var eventSource = new EventSource("notify?userId=123456");
eventSource.onopen = function(e){
    console.log("Connection Opened");
};
eventSource.onmessage = function(e){
    console.log("Message: " + e.data);
};
eventSource.onerror = function(e){
    console.log("Error");
};

其中 notify 是我的 Servlet 的位置(在我使用 @WebServlet("/notify") 的 Servlet 上),而 ?userId=123456 是我试图传递给 Servlet 的参数。在开发者控制台中,上述代码不会生成任何日志。但是,在服务器端,我可以看到代码确实连接了,但是,每当我尝试向客户端发送消息时,onmessage 函数都不会命中。如果我删除参数并执行以下操作:

var eventSource = new EventSource("notify");

在开发人员控制台中,每隔几秒钟我就会得到:

Connection Opened
Error

它似乎在不断重复。我在这里错过了什么?

因此,我得出的结论是,服务器发送的事件还没有完全存在。我遇到问题的原因是,在服务器端,如果没有 userId 参数,那么我将在该方法上调用 return。这将返回到客户端,提醒它连接已打开。奇怪的是,无论出于何种原因,这都会导致调用onerror方法,然后调用onopen方法。但是,连接已正确打开。如果我确实提供了 userId 参数,我将保存上下文以供以后在需要发送客户端信息时使用。我几乎不知道,这让客户相信它还没有连接。因此,EventSource 在收到第一条消息之前不会注册打开的状态。对我来说,这似乎有点集市,我相信可能还有其他一些问题和跨浏览器差异。因此,请远离服务器发送的事件!如果您有更多信息,请提供,谢谢。