Angular 2 spring boot server side events

前端 未结 4 636
囚心锁ツ
囚心锁ツ 2020-12-05 03:44

Can somebody please provide me an example for spring boot server side events?

Basically I need to push server side events to browser. I\'m using angular 2 and sprin

4条回答
  •  [愿得一人]
    2020-12-05 04:02

    The Answer from Pratap A.K is great. But to keep it a little bit cleaner, you shoud create a NotificationService which implements a Interface. Like this:

    NotificationServiceImpl.java

    public class NotificationServiceImpl implements NotificationService {
    
    public static final List emitters = Collections.synchronizedList(new ArrayList<>());
    
    @Override
    public SseEmitter initSseEmitters() {
    
        SseEmitter emitter = new SseEmitter();
        emitters.add(emitter);
        emitter.onCompletion(() -> emitters.remove(emitter));
    
        return emitter;
    }
    
    @Override
    public void sendSseEventsToUI(WebSource notification) {
        List sseEmitterListToRemove = new ArrayList<>();
        this.emitters.forEach((SseEmitter emitter) -> {
            try {
                emitter.send(notification, MediaType.APPLICATION_JSON);
            } catch (IOException e) {
                emitter.complete();
                sseEmitterListToRemove.add(emitter);
                e.printStackTrace();
            }
        });
        this.emitters.removeAll(sseEmitterListToRemove);
      }
    }
    

    NotificationService.java

    public interface NotificationService {
    
    public SseEmitter initSseEmitters();
    public void sendSseEventsToUI(WebSource notification);
    
    }
    

    SSEController.java

    @RestController
    @RequestMapping("/mystream")
    public class SSEController {
    
    @Autowired
    NotificationServiceImpl INotificationServiceImpl;
    
    @CrossOrigin
    @RequestMapping(path = "/streamsource", method = RequestMethod.GET)
    public SseEmitter stream() throws IOException {
    
        return INotificationServiceImpl.initSseEmitters();
      }
    }
    

    Best regards

提交回复
热议问题