【问题标题】:Error connecting EventSource (Server-sent event) to server将 EventSource(服务器发送的事件)连接到服务器时出错
【发布时间】:2015-01-20 02:16:19
【问题描述】:

我正在尝试将 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 是我要传递给的参数小服务程序。在开发者控制台中,上述代码不会产生任何日志。但是,在服务器端,我可以看到代码确实连接了,但是,每当我尝试向客户端发送消息时,onmessage 函数都不会被命中。如果我删除参数并执行以下操作:

var eventSource = new EventSource("notify");

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

Connection Opened
Error

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

【问题讨论】:

  • 看来问题与我的服务器实现有关。如果没有传递参数,则返回,如果有参数,则保存异步上下文以供以后使用,因此它似乎不被视为“已连接”。我将不得不尝试找到解决此问题的方法。

标签: java javascript servlets server-sent-events


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-11-20
    • 1970-01-01
    • 2019-02-09
    • 2021-01-01
    • 2021-03-22
    • 2015-03-26
    • 2014-03-25
    • 2012-07-15
    • 1970-01-01
    相关资源
    最近更新 更多