春天和事件来源
Spring And EventSource
我正在尝试向我的网站发送通知。我的事件源不会保持打开状态。它关闭并无限期打开。它不会保持打开状态几秒钟。
爪哇语
this.subscribe = function(eid, cid) {
if (!!window.EventSource) {
//no authentication. Be carreful
source = new EventSource(config.apiUrl + "v1/e/" + eid + "/c/" + cid + "/sse");
source.onerror = error;
source.addEventListener('message', function(e) {
console.log(e.data);
}, false);
source.addEventListener('open', function(e) {
// Connection was opened.
console.log(e.data);
}, false);
source.addEventListener('error', function(e) {
if (e.readyState == EventSource.CLOSED) {
// Connection was closed.
}
}, false);
} else {
// Result to xhr polling :(
console.log("No notifications available");
}
}
爪哇部分
SseEmitter subscribeUpdates() {
SseEmitter sseEmitter = new SseEmitter();
synchronized (this.sseEmitters) {
this.sseEmitters.add(sseEmitter);
sseEmitter.onCompletion(() -> {
synchronized (this.sseEmitters) {
this.sseEmitters.remove(sseEmitter);
}
});
}
return sseEmitter;
}
知道吗?
提前谢谢。
在没有任何线索的情况下,我设法以不同的方式做事。我有一个NodeJS服务器,它提供SSE,Websocket和其他RealTime的东西。我的 Spring 应用程序只是将事件发送到 nodeJS,后者将其发送到客户端。
使用您选择的有效负载从 JAVA 发送一条消息,以指示不再有数据:
source.addEventListener('message', function(e) {
if ('END-OF-STREAM' == e.data) {
source.close(); // stop retry
}
console.log(e.data);
}, false);
您需要像这样定义 SseEmitter 的超时: SseEmitter sseEmitter = new SseEmitter(300000L); // 5 min
相关文章:
- 分派点击事件并保留击键修饰符
- 模糊事件的Javascript测试
- keyup事件处理程序更改焦点不适用于快速键入
- 使用 jQuery 的 .on 函数如何获取事件的原始元素
- 如何使Javascript动态html表及其上的事件
- 使用类从一个标记中双击事件
- 如何在未直接触发的情况下停止事件
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 对iPad上的点击事件反应缓慢
- 事件和状态
- Fancybox是否将Click事件静音
- 主干-不管怎样,检查事件以前是否绑定过
- 从控制器返回后Ajax启动事件激发
- 如何从画布上的某个移动事件中获取X和Y
- Jquery:未触发select事件
- JsFiddle上的鼠标事件不起作用
- 只覆盖箭头键滚动事件
- $window.ga在AngularJS事件中未定义
- cron作业与Javascript计时事件
- 春天和事件来源