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.

--

--