gpt4 book ai didi

java - Glassfish SSE 未成功将事件发送到浏览器 EventSource(最新的 Chrome)

转载 作者:行者123 更新时间:2023-11-30 11:22:04 25 4
gpt4 key购买 nike

我在 Glassfish 的服务器端创建了以下运行的类:

@Path("events")
public class SseResource {
@GET
@Produces(SseFeature.SERVER_SENT_EVENTS)
public EventOutput getServerSentEvents() {
final EventOutput eventOutput = new EventOutput();
// new Thread(new Runnable() {
// @Override
// public void run() {
try {
for (int i = 0; i < 10; i++) {
// ... code that waits 1 second
final OutboundEvent.Builder eventBuilder
= new OutboundEvent.Builder();
eventBuilder.name("message-to-client");
eventBuilder.data(String.class,
"Hello world ");
final OutboundEvent event = eventBuilder.build();
eventOutput.write(event);


}
} catch (IOException e) {
throw new RuntimeException(
"Error when writing the event.", e);
} finally {
try {
eventOutput.close();
} catch (IOException ioClose) {
throw new RuntimeException(
"Error when closing the event output.", ioClose);
}
}
// }
// }).start();
return eventOutput;
}

我从这里的资源初始化类:

resources.add(WebServicesPublic.SseResource.class);

然后我创建了一个调用服务器的 HTML 页面:

<html>
<body>
Time: <span id="foo"></span>

<br><br>
<button onclick="start()">Start</button>

<script type="text/javascript">
function start() {
var eventSource = new EventSource("webresources/events");

eventSource.addEventListener("message-to-client", msgClient, false);
eventSource.onmessage = function(event) {
document.getElementById('foo').innerHTML = event.data;
};
}

function msgClient(event)
{
document.getElementById('foo').innerHTML = event.data;
}
</script>
</body>
</html>

但是,浏览器中不会显示任何事件。我正在运行 Glassfish 4。有人知道为什么它不起作用吗?如果我在服务器代码中设置断点,它就会被击中。然而,Chrome 中的类似断点表明没有收到任何事件。

最佳答案

如果注释掉 eventBuilder.name("message-to-client"); 是否有效?如果没有该行,事件将转到默认的消息处理程序,称为“消息”。 (事件名称​​应该有效,但首先让默认案例有效。)

此外,我不认为 onmessage 语法有效,所以将该行替换为:

eventSource.addEventListener('message',function(event){
document.getElementById('foo').innerHTML = event.data;
},false);

此外,请确保您已在 Chrome 下打开开发者工具(网络选项卡)。您的连接持续 10 秒,然后服务器端关闭它。 Chrome 会等待大约 3 秒,重新连接。因此,在网络选项卡下,过一会儿,您应该会看到行开始堆积,每 10 秒长一次。 (如果没有,console.log 下应该有线索。)

关于java - Glassfish SSE 未成功将事件发送到浏览器 EventSource(最新的 Chrome),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21968162/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com