-
Notifications
You must be signed in to change notification settings - Fork 101
/
Copy patheventsource-server.js
36 lines (32 loc) · 1.08 KB
/
eventsource-server.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
// Simple event source server demo
const response = require("ringo/jsgi/response");
const arrays = require("ringo/utils/arrays");
const {EventSource, isEventSourceRequest} = require("ringo/jsgi/eventsource");
const connections = module.singleton('connections', () => []);
exports.app = (req) => {
if (isEventSourceRequest(req)) {
const eventSource = new EventSource(req);
eventSource.start({
'Access-Control-Allow-Origin': '*'
});
connections.push(eventSource);
return eventSource.response;
} else {
return response.static(module.resolve("html/eventsource.html"), "text/html");
}
};
const doPing = () => {
console.info("Sending ping to all ", connections.length ,"connections");
connections.forEach(function(eventSource) {
try {
eventSource.data('Ping ' + new Date());
} catch (e) {
console.error(e);
arrays.remove(connections, eventSource);
}
});
}
if (require.main == module) {
const server = require("ringo/httpserver").main(module.id);
setInterval(doPing, 2 * 1000);
}