我正在尝试将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
似乎不断重复。我在这里缺少什么?
答案 0 :(得分:1)
所以,我已经得出结论,服务器发送的事件还没有完成。我遇到问题的原因是,在服务器端,如果没有userId参数,那么我会在方法上调用return。这将返回到客户端,提醒它连接已打开。奇怪的是,无论出于何种原因,这会导致调用onerror方法,然后调用onopen方法。但是,连接已正确打开。如果我确实提供了userId参数,我会保存上下文以供以后在需要发送客户端信息时使用。我不知道,这让客户认为它还没有联系。因此,EventSource在收到第一条消息之前不会注册。对我来说,这似乎是一个小集市,我确信可能还有其他一些问题和跨浏览器的差异。因此,远离服务器发送的事件!如果您有更多信息,请提供,谢谢。