Server sent events + Java with Spring MVC

html, java, javascript, spring-mvc

Solution

For anyone with this problem, the problem was related to the new lines needed after the data. Basically, you need two lines and not one as I was using. That way it works everywhere.

Changing this:

return "data:Testing 1,2,3" + r.nextInt() +"\n";

To this:

return "data:Testing 1,2,3" + r.nextInt() +"\n\n";

Fixes the problem..

Problem

I am currently having a problem related to SSE and Windows XP. The source code below is currently working in every Chrome I tried except for Chrome in Windows XP (?) Not sure why. This is intended to be used for a control panel, where users must use Chrome. In other words, I don't care about IE, Firefox, etc. The problem: Server side events works everywhere (Chrome) but not in Windows XP (Chrome). When I say it works, I mean that the message handler is called. The code Javascript code ``` if (!!window.EventSource) { console.log("Event source available"); var source = new EventSource('/admin/systemalert'); source.addEventListener('message', function(e) { console.log(e.data); }); source.addEventListener('open', function(e) { console.log("Connection was opened."); }, false); source.addEventListener('error', function(e) { if (e.readyState == EventSource.CLOSED) { console.log("Connection was closed."); } else { console.log(e.readyState); <-- in windows XP it prints Error here } }, false); } else { console.log("No SSE available"); } ``` Server side code ``` @Controller @RequestMapping("/admin/**") public class AdminController { @RequestMapping("systemalert") public @ResponseBody String sendMessage(HttpServletResponse response) { Random r = new Random(); response.setContentType("text/event-stream"); try { Thread.sleep(10000); } catch (InterruptedException e) { e.printStackTrace(); } return "data:Testing 1,2,3" + r.nextInt() +"\n"; } } ``` As stated in the code, the line console.log(e.readyState); prints "Error" when using Chrome in Windows XP. Any ideas? Anyone see anything wrong with the source code? Thanks in advance. Agustin

Original source