2016-02-29 3 views
1

Я пытаюсь отправить уведомление на мой сайт. My EventSource НЕ остается открытым. Он закрывается и открывается бесконечно. Он не остается открытым на несколько секунд.Spring And 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. Приложение my Spring juste отправляет событие nodeJS, которое отправляет его клиентам.

ответ

0

Отправить сообщение от JAVA с выбранной полезной нагрузкой, чтобы указать, не больше данных:

source.addEventListener('message', function(e) { 
    if ('END-OF-STREAM' == e.data) { 
     source.close(); // stop retry 
    } 
    console.log(e.data); 
}, false); 
0

Вам нужно определить тайм-аут для SseEmitter подобных: SseEmitter sseEmitter = new SseEmitter(300000L); // 5 min