Package ratpack.sse

Class ServerSentEvents

  • All Implemented Interfaces:
    Renderable

    public class ServerSentEvents
    extends java.lang.Object
    implements Renderable
    A renderable object for streaming server side events.

    A renderer for this type is implicitly provided by Ratpack core.

    Example usage:

    
     import org.reactivestreams.Publisher;
     import ratpack.http.client.ReceivedResponse;
     import ratpack.sse.ServerSentEvent;
     import ratpack.sse.ServerSentEvents;
     import ratpack.test.embed.EmbeddedApp;
    
     import java.time.Duration;
     import java.util.Arrays;
     import java.util.Objects;
    
     import static ratpack.stream.Streams.periodically;
    
     import static java.util.stream.Collectors.joining;
    
     import static org.junit.Assert.assertEquals;
    
     public class Example {
       public static void main(String[] args) throws Exception {
         EmbeddedApp.fromHandler(context -> {
           Publisher<ServerSentEvent> stream = periodically(context, Duration.ofMillis(5), i ->
             i < 5 ? ServerSentEvent.builder().id(i.toString()).event("counter").data("event " + i).build() : null
           );
    
           context.render(ServerSentEvents.builder().build(stream));
         }).test(httpClient -> {
           ReceivedResponse response = httpClient.get();
           assertEquals("text/event-stream;charset=UTF-8", response.getHeaders().get("Content-Type"));
    
           String expectedOutput = Arrays.asList(0, 1, 2, 3, 4)
             .stream()
             .map(i -> "id: " + i + "\nevent: counter\ndata: event " + i + "\n")
             .collect(joining("\n"))
             + "\n";
    
           assertEquals(expectedOutput, response.getBody().getText());
         });
       }
     }
     
    See Also:
    Wikipedia - Using server-sent events, MDN - Using server-sent events, builder()
    • Method Detail

      • builder

        public static ServerSentEventsBuilder builder()
        Creates a builder for an event stream.
        Returns:
        a builder for an event stream
      • serverSentEvents

        @Deprecated
        public static <T> ServerSentEvents serverSentEvents​(Publisher<T> publisher,
                                                            ratpack.func.Action<? super Event<T>> action)
        Deprecated.
        since 1.10 - use builder()
        Deprecated.
      • getPublisher

        @Deprecated
        @Nullable
        public Publisher<? extends Event<?>> getPublisher()
        Deprecated.
        since 1.10 with no replacement
        Deprecated.
      • render

        public void render​(Context context)
                    throws java.lang.Exception
        Render this object to the response.
        Specified by:
        render in interface Renderable
        Parameters:
        context - the request handling context
        Throws:
        java.lang.Exception - any