UNPKG

1.21 kBJavaScriptView Raw
1export function observableEventSource(observable) {
2 return function observableEventSourceMiddleware(req, res) {
3 if (!req.accepts('text/event-stream')) {
4 res.status(400).send('This endpoint implements sever sent events.');
5 return;
6 }
7
8 req.socket.setKeepAlive(true);
9 req.socket.setTimeout(0);
10
11 //send headers for event-stream connection
12 res.writeHead(200, {
13 'Content-Type': 'text/event-stream',
14 'Cache-Control': 'no-cache',
15 'Connection': 'keep-alive', // eslint-disable-line quote-props
16 });
17
18 res.write('\n');
19
20 const subscription = observable.subscribe((data) => {
21 res.write(`data: ${JSON.stringify(data)}\n\n`);
22 if (res.flushHeaders) res.flushHeaders();
23 });
24
25 // // keep the connection open by sending a comment
26 // var keepAlive = setInterval(function() {
27 // res.sse(':keep-alive\n\n');
28 // }, 20000);
29 //
30 // // cleanup on close
31 // res.on('close', function close() {
32 // clearInterval(keepAlive);
33 // });
34
35 req.on('close', () => subscription.unsubscribe());
36 };
37}