Angular 2 spring boot服务器端事件

有人可以给我一个春季启动服务器端事件的例子吗?

基本上我需要将服务器端事件推送到浏览器。 我正在使用角度2和弹簧启动后端。 请提供一个示例示例,我无法找到好的示例。

@Controller public class SSEController { private final List emitters = new ArrayList(); @RequestMapping(path = "/stream", method = RequestMethod.GET) public SseEmitter stream() throws IOException { SseEmitter emitter = new SseEmitter(); emitters.add(emitter); emitter.onCompletion(() -> emitters.remove(emitter)); return emitter; } } 

如何从服务器连续推送数据以及如何在Angular 2中订阅此事件?

提前致谢

没有人回答,所以回答我自己的问题。

有一个Spring Rest控制器

SseController.java

 import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.servlet.mvc.method.annotation.SseEmitter; import java.io.IOException; import java.util.ArrayList; import java.util.Collections; import java.util.List; @RestController public class SSEController { public static final List emitters = Collections.synchronizedList( new ArrayList<>()); @RequestMapping(path = "/stream", method = RequestMethod.GET) public SseEmitter stream() throws IOException { SseEmitter emitter = new SseEmitter(); emitters.add(emitter); emitter.onCompletion(() -> emitters.remove(emitter)); return emitter; } } 

ServiceClass.java

 public void sendSseEventsToUI(Notification notification) { //your model class List sseEmitterListToRemove = new ArrayList<>(); SSEController.emitters.forEach((SseEmitter emitter) -> { try { emitter.send(notification, MediaType.APPLICATION_JSON); } catch (IOException e) { emitter.complete(); sseEmitterListToRemove.add(emitter); e.printStackTrace(); } }); SSEController.emitters.removeAll(sseEmitterListToRemove); } 

最后在Angular2组件中执行此操作

notification.component.ts

 import {Component, OnInit} from '@angular/core'; declare let EventSource:any; @Component({ selector: 'notification-cmp', templateUrl: 'notification.component.html' }) export class NotificationComponent implements OnInit { connect(): void { let source = new EventSource('http://localhost:8080/stream'); source.addEventListener('message', message => { let n: Notification; //need to have this Notification model class in angular2 n = JSON.parse(message.data); console.log(message.data); }); } }