我正试图向我的网站发送通知。我的EventSource不会一直打开。它会无限期地关闭和打开。它几秒钟都不会打开。
Javascript
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");
}
}Java部件
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,后者将其发送到客户端。
发布于 2017-07-30 18:23:47
使用所选的有效负载从JAVA发送一条消息,以指示不再有数据:
source.addEventListener('message', function(e) {
if ('END-OF-STREAM' == e.data) {
source.close(); // stop retry
}
console.log(e.data);
}, false);发布于 2017-10-29 13:27:19
您需要像这样为SseEmitter定义一个超时:SseEmitter sseEmitter = new SseEmitter(300000L); // 5 min
https://stackoverflow.com/questions/35709364
复制相似问题