I am trying to use JavaScript SSE from Jersey. I have the following code in my resource. I host on Java7 and Tomcat 7. I am not getting any errors. But I do not see the data on the page.
I call /broadcast to send data. It shows a message. But nothing comes to the client. In Firefox, I see the /broadcast event several times.
This is the link I used. https://jersey.java.net/documentation/latest/sse.html
package net.jigarshah.dse.tracker; import javax.inject.Singleton; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.MediaType; import org.glassfish.jersey.media.sse.EventOutput; import org.glassfish.jersey.media.sse.OutboundEvent; import org.glassfish.jersey.media.sse.SseBroadcaster; import org.glassfish.jersey.media.sse.SseFeature; @Singleton @Path("broadcast") public class SSEResource { private SseBroadcaster broadcaster = new SseBroadcaster(); @POST @Produces(MediaType.TEXT_PLAIN) @Consumes(MediaType.TEXT_PLAIN) public String broadcastMessage(String message) { OutboundEvent.Builder eventBuilder = new OutboundEvent.Builder(); message = message + "\n\n"; OutboundEvent event = eventBuilder.name("message") .mediaType(MediaType.TEXT_PLAIN_TYPE) .data(String.class, message) .build(); broadcaster.broadcast(event); System.out.println("broadcasting listen [" +message+ "]"); return "Message was '" + message + "' broadcast."; } @GET @Produces(SseFeature.SERVER_SENT_EVENTS) public EventOutput listenToBroadcast() { System.out.println("will listen"); final EventOutput eventOutput = new EventOutput(); this.broadcaster.add(eventOutput); return eventOutput; } }
My Index.html code is as follows.
<script type="text/javascript"> var url = "webapi/broadcast"; //var url="http://localhost:8080/trackapp/webapi/broadcast/listen"; var source=new EventSource(url); source.onerror=function(event) { console.log("error [" + source.readyState + "]"); }; source.onopen = function(event){ console.log("eventsource opened!"); }; source.onmessage=function(event) { console.log(event.data); document.getElementById("result").innerHTML+=event.data + "<br>"; }; </script>
source share