What is Server Sent Event(SSE) and How to Use It in Java Spring Boot?

Büşra Bozgöz
Codimis
Published in
6 min readApr 28, 2023
SSE Flow Diagram

Server-sent events (SSE) is a technology for transmitting data from a server to a web client in real-time. It was introduced as part of the HTML5 specification and has been supported by modern web browsers since around 2011.

SSE is based on the concept of long-lived HTTP connections, where the client establishes a persistent connection to the server and the server can send data to the client at any time. This is in contrast to traditional web applications, where the client must send a request to the server in order to receive data.

SSE was designed to provide a simple and efficient way for web applications to receive real-time updates from the server. It is often used in applications such as chat apps, stock tickers, social media feeds, and other applications that require real-time updates.

SSE is supported by all modern web browsers and can be implemented on the server side using various web technologies, such as Java servlets, Node.js, and others. It is an important tool for building real-time web applications and continues to be widely used today.

Server-sent events (SSE) is a technology for transmitting data from a server to a web client in real-time. With SSE, the client can establish a persistent connection to the server, and the server can push data to the client at any time. This can reduce the overhead of frequent HTTP requests and save battery life on mobile devices.

SSE is typically used to build real-time applications, such as chat apps, stock tickers, or social media feeds. It is especially useful for applications that require real-time updates from the server but do not need the client to send frequent requests to the server.

To use SSE, the client must create an EventSource object and specify the URL of the server-side script that will generate the events. The server-side script can then use the Content-Type: text/event-stream header to send a stream of events to the client. The client can listen to these events and perform actions in response to them.

SSE is an efficient technology for real-time communication because it allows the server to send data to the client without the client having to send a request. This reduces the overhead of frequent HTTP requests and can save battery life on mobile devices.

Server-sent events (SSE) can be helpful in Java applications because they provide a simple and efficient way to send real-time data from the server to the client.

Using SSE can be especially beneficial in situations where the client needs to receive frequent updates from the server, but the server does not need to receive frequent requests from the client.

To use server-sent events (SSE) in a Java application, you can use the javax.servlet.AsyncContext class, which was introduced in the Servlet 3.0 specification.

Here is an example of how you could use AsyncContext to send SSE events to a client:

This servlet sends 10 events to the client, with a 1-second interval between each event. Each event consists of a message event type and a data field containing the event data.

On the client side, you can use the JavaScript EventSource object to receive and handle these events. Here is an example of how you could do this:

This code creates an EventSource object and specifies the URL of the server-side script that will generate the events. It then sets an onmessage event handler to be called whenever a new event is received from the server. The event object passed to the handler contains the data field with the event data.

Now let’s take a look at how we can apply it in Spring Boot.

First, you will need to create a controller to handle the SSE events. You can do this by annotating a class with @Controller and @RequestMapping, and using the SseEmitter class to send events to the client:

This controller sends 10 events to the client, with a 1-second interval between each event. Each event consists of a message event name and a data field containing the event data.

Here is another example of using server-sent events (SSE) in a Spring Boot application:

In this example, we will create a controller that allows the client to send a message to the server, and the server will send the message back to the client as an SSE event:

This controller has two methods: sendMessage and register. The sendMessage method receives a message from the client as a POST request and sends the message back to the client as an SSE event.

Here is an example of how Server-Sent Events (SSEs) could be implemented in a Spring Boot project:

1.Controller layer:

In the controller layer, you can create an endpoint that returns a ResponseBodyEmitter object, which is a subclass of HttpServletResponse that allows you to send a stream of events to the client.

Here is an example of a controller endpoint that uses SSEs to send a stream of events to the client:

2.Service layer:

In the service layer, you can implement the logic for generating the events that will be sent to the client. For example, you could create a service that periodically generates events based on some data source, and then sends those events to the controller to be sent to the client.

Here is an example of a service that generates events and sends them to the controller:

3.Repository layer:

In the repository layer, you can access the data source and retrieve the data needed to generate the events. This could be a database, a file, or any other source of data.

Here is an example of a repository that retrieves data from a database:

4.To use this method, you will need to include the following dependencies in your project:

--

--