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
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:
To this:
Fixes the problem..