2016-12-06 4 views
5

Может ли кто-нибудь, пожалуйста, предоставить мне пример для событий на стороне сервера весны?Угловые события с весенним загрузочным сервером

В основном мне нужно направить события на стороне сервера в браузер. Я использую угловые 2 и пружинные ботинки. Просьба предоставить мне пример 1 примера, я не могу найти хорошие примеры.

@Controller 
public class SSEController { 

    private final List<SseEmitter> 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?

Заранее спасибо

ответ

8

Никто не ответил, так отвечая на мой собственный вопрос.

есть контроллер 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<SseEmitter> 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<SseEmitter> 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); 
     }); 
    } 
} 
+0

это была большая помощь, спасибо! – jmw5598

Смежные вопросы