6

我正在尝试制作一个使用 EvenSource 对象(在 javascript 中)来制作服务器发送事件(彗星)的页面。我阅读了很多关于它的教程,但没有找到解释以下问题的教程:

  1. 当我订阅 EventSource 的“onerror”事件时 - 我得到的参数类型是什么?我怎么知道究竟是什么错误?

  2. 我知道 EvenSource 有一个就绪状态,它的变化取决于浏览器。为什么每次“onmessage”事件发生后我的 readystate 都变为 0?(我使用铬)。

  3. 我如何证明我与服务器的连接保持连接而不是每次都重新连接?

浏览器:铬。

服务器端:Java(如果相关,我制作的示例在 Java EE 预览版中。但我将在 WebLogic 10R3 上工作。

在我的示例中发生的情况是数据正在从服务器发送到客户端,然后发生“onerror”事件(readystate 为 0),3 秒后(chrome 的默认值)它重新连接并再次发送数据。

javascript代码:

var source = new EventSource("TrySRV");
source.onmessage = function(event){
    alert(event.data);
}

source.onerror = function(event){
    alert(source.readystate);
}

Java 代码:

response.setHeader("Content-Type", "text/event-stream");
response.setHeader("Cache-Control", "no-cache");
response.getWriter.write("Hello World");

如果还有什么你想知道的——告诉我。希望你能帮助我。

谢谢!

4

2 回答 2

3

您需要在服务器上保持连接,而不是响应它并关闭。

请参阅http://jcp.org/en/jsr/detail?id=315或 Glassfish / Grizzly / Jetty 服务器。

于 2012-10-02T14:47:05.723 回答
1

尝试使用:

response.getWriter.write("data:Hello World")

根据 w3schools:输出要发送的数据(始终以“数据:”开头)

http://www.w3schools.com/html/html5_serversentevents.asp

于 2013-07-01T21:37:26.907 回答