Created
April 8, 2025 06:33
-
-
Save aztack/6e27dc12999072c211cb9bac3c36645e to your computer and use it in GitHub Desktop.
event-stream-mvp
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const http = require('http'); | |
const port = process.env.PORT || 3000; | |
const server = http.createServer((req, res) => { | |
// Server-sent events endpoint | |
if (req.url === '/events') { | |
res.writeHead(200, { | |
'Content-Type': 'text/event-stream', | |
'Cache-Control': 'no-cache', | |
...(req.httpVersionMajor === 1 && { 'Connection': 'keep-alive' }) | |
}); | |
const refreshRate = 1000; // in milliseconds | |
return setInterval(() => { | |
const id = Date.now(); | |
const data = `Hello World ${id}`; | |
const message = | |
`retry: ${refreshRate}\nid:${id}\ndata: ${data}\n\n`; | |
res.write(message); | |
}, refreshRate); | |
} | |
// Client side | |
res.writeHead(200, {'Content-Type': 'text/html'}); | |
res.end(` | |
<!DOCTYPE html> | |
<html lang="en" dir="ltr"> | |
<head> | |
<meta charset="utf-8"> | |
<title>SSE</title> | |
</head> | |
<body> | |
<pre id="log"></pre> | |
</body> | |
<script> | |
var eventSource = new EventSource('/events'); | |
eventSource.onmessage = function(event) { | |
document.getElementById('log').innerHTML += event.data + '<br>'; | |
}; | |
</script> | |
</html> | |
`); | |
}); | |
server.listen(port); | |
server.on('error', (err) => { | |
console.log(err); | |
process.exit(1); | |
}); | |
server.on('listening', () => { | |
console.log(`Listening on port ${port}`); | |
}); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment