UNPKG

1.34 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.observableEventSource = observableEventSource;
7function observableEventSource(observable) {
8 return function observableEventSourceMiddleware(req, res) {
9 if (!req.accepts('text/event-stream')) {
10 res.status(400).send('This endpoint implements sever sent events.');
11 return;
12 }
13
14 req.socket.setKeepAlive(true);
15 req.socket.setTimeout(0);
16
17 //send headers for event-stream connection
18 res.writeHead(200, {
19 'Content-Type': 'text/event-stream',
20 'Cache-Control': 'no-cache',
21 'Connection': 'keep-alive' });
22
23 res.write('\n');
24
25 var subscription = observable.subscribe(function (data) {
26 res.write('data: ' + JSON.stringify(data) + '\n\n');
27 if (res.flushHeaders) res.flushHeaders();
28 });
29
30 // // keep the connection open by sending a comment
31 // var keepAlive = setInterval(function() {
32 // res.sse(':keep-alive\n\n');
33 // }, 20000);
34 //
35 // // cleanup on close
36 // res.on('close', function close() {
37 // clearInterval(keepAlive);
38 // });
39
40 req.on('close', function () {
41 return subscription.unsubscribe();
42 });
43 };
44}
\No newline at end of file