2016-02-29 117 views
1

我试图发送通知到我的网站。 我的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,并将它发送给客户端。

回答

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