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

标签 java javascript servlets server-sent-events

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

var eventSource = new EventSource("notify");

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

Connection Opened
Error

似乎一直在重复。我在这里缺少什么?

最佳答案

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

关于java - 将 EventSource(服务器发送的事件)连接到服务器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28036723/

相关文章:

javascript - tinyMCE 无法在 IE6 中使用 jQuery 1.4.2

servlets - 使用特殊的自动启动 servlet 在启动时进行初始化并共享应用程序数据

java - 我可以在 Java 中将多个类构建到一个 .class 文件中吗?

java - MongoDB Java 驱动程序 3.1 将查找转换为数组

javascript - 没有jquery的DOM注入(inject)

javascript - PAK 电话号码格式的 HTML5 模式

java - 用于读取临时参数的PreparedStatement

java - 如何使@Component类中的方法成为@Transactional?

java - jqGrid 未填充来自 Java Servlet 的 JSON 数据

java - SLF4J 类未找到异常