Understanding Server-Sent Events With Node.js

Aparna Rathore
2 min readJul 30, 2023

--

Server-Sent Events (SSE) is a simple and efficient way to enable real-time communication from the server to the client over HTTP. It allows the server to send a stream of data to the client without the need for the client to make multiple requests.

In Node.js, you can implement Server-Sent Events using the built-in HTTP module or with the help of popular frameworks like Express. Here’s a step-by-step guide to understanding and implementing Server-Sent Events in Node.js using the Express framework:

Step 1: Install Dependencies
Create a new Node.js project and install the required dependencies using npm or yarn:

```bash
npm init -y
npm install express
```

Step 2: Set Up the Express Server
Create a new file, e.g., `server.js`, and set up the basic Express server:

```javascript
const express = require(‘express’);
const app = express();
const PORT = 3000;

app.use(express.static(‘public’));

app.listen(PORT, () => {
console.log(`Server running on
http://localhost:${PORT}`);
});
```

Step 3: Create the HTML Page (Client-Side)
Create a new folder named `public` in your project root directory and create an HTML file named `index.html` inside it. This file will be served to the client-side and will handle the SSE connection:

```html
<!DOCTYPE html>
<html>
<head>
<title>Server-Sent Events Example</title>
</head>
<body>
<h1>Server-Sent Events Example</h1>
<div id=”sse-data”></div>
<script>
const sseData = document.getElementById(‘sse-data’);

const eventSource = new EventSource(‘/sse’);
eventSource.onmessage = (event) => {
const data = JSON.parse(event.data);
sseData.innerHTML += `<p>${data.message}</p>`;
};

eventSource.onerror = (error) => {
console.error(‘SSE Error:’, error);
eventSource.close();
};
</script>
</body>
</html>
```

Step 4: Implement SSE Route on the Server
Update your `server.js` file to implement the SSE route:

```javascript
const express = require(‘express’);
const app = express();
const PORT = 3000;

app.use(express.static(‘public’));

// SSE route
app.get(‘/sse’, (req, res) => {
res.writeHead(200, {
‘Content-Type’: ‘text/event-stream’,
‘Cache-Control’: ‘no-cache’,
‘Connection’: ‘keep-alive’,
});

const sendData = (data) => {
res.write(`data: ${JSON.stringify(data)}\n\n`);
};

// Simulate SSE data
const intervalId = setInterval(() => {
const message = `Server Time: ${new Date().toLocaleTimeString()}`;
sendData({ message });
}, 1000);

// Close SSE connection when the client disconnects
req.on(‘close’, () => {
clearInterval(intervalId);
});
});

app.listen(PORT, () => {
console.log(`Server running on
http://localhost:${PORT}`);
});
```

Step 5: Run the Server
Run your Node.js server by executing the following command in the project root directory:

```bash
node server.js
```

Step 6: Open the Web Page
Open your web browser and navigate to `http://localhost:3000`. You should see the SSE data being streamed to the client, updating every second with the server’s current time.

In this example, the server sends a simple message containing the current server time every second to the connected clients using SSE. SSE is a powerful mechanism for real-time communication in web applications and is especially useful for scenarios where you need to push data from the server to the client continuously.

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

--

--

Aparna Rathore
Aparna Rathore

Written by Aparna Rathore

A Tiny Girl with not so many tiny dreams.

No responses yet

Write a response