Agustin Lopez
Agustin Lopez

Reputation: 1365

Server sent events + Java with Spring MVC

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

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

Upvotes: 12

Views: 16175

Answers (3)

Sébastien Deleuze
Sébastien Deleuze

Reputation: 6209

Instead of implementing manually SSE, be aware that Spring Framework 4.2+ supports natively SSE. See this sample SSE enabled controller returning an SseEmitter.

Upvotes: 6

Agustin Lopez
Agustin Lopez

Reputation: 1365

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..

Upvotes: 11

Agustin Lopez
Agustin Lopez

Reputation: 1365

Ok, I have created a small example in PHP + HTML5.

You can take a look at it here. You will see that I have two different buttons; one to create the event source and the second one to disconnect it.

The code prints directly to firefox/chrome console. As you will see, the message handler is called in firefox but not chrome.

This is not working on any chrome I tested so far.

Example Firefox output:

Creating event source
Open
Id: 1334072077
Message: Se puede leer esto?
Origin: http://arancione-consulting.com
Closed
Open
Id: 1334072082
Message: Se puede leer esto?
Origin: http://arancione-consulting.com
Closed

Example Chrome output:

Creating event source
Open
Closed
Open
Closed

In case anyone wants to know, the server side code is:

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // prevent caching of event data.
echo "id: " . time() . "\n";
echo "Event: time\n";
echo "data: Se puede leer esto?\n";
flush();
?>

Any ideas?

Upvotes: 0

Related Questions