Tag: server sent events

是否已弃用使用浏览器在Chrome中实时查看EventSource?

去年(大约6月),我在HTML5事件源上写了一个内部操作方法,显示在浏览器中查看Chrome中的事件流数据,实时更新。 输出与此类似: Event: my-event-name Data: {“my-data”} Event: my-event-name Data: {“my-data”} Event: my-event-name Data: {“my-data”} 现在,当我在最新版本的Chrome中打开它时,它不再有效(但是读取事件源的应用程序仍然有效)。 即当我浏览到EventSource URL时,我得到一个空白屏幕,没有显示或更新事件信息。 Chrome中似乎已弃用此function。 我能看到的唯一模糊相关的评论就是这个评论 : 通常,请求未完成时不显示内容。 这似乎无法满足EventSource开发人员的需求。 我的问题是: 是否已弃用使用浏览器在Chrome中实时查看EventSource? 编辑:这是一些复制此问题的Java代码。 您设置maven项目并运行Jetty.java ,然后浏览到http:// localhost:8070 / 症状是Chrome会暂停大约十秒钟(大约与循环中的睡眠时间相同),然后在完成后显示内容。 即Chrome正在等待直到流完成,而不是像过去那样实时显示。 这是pom.xml 4.0.0 com.julian eventsource 0.0.1-SNAPSHOT eventsource org.mortbay.jetty jetty 4.2.12 javax.servlet servlet-api 2.5 这是Jetty.java package jetty; import java.io.IOException; import java.io.PrintWriter; import java.util.logging.Level; import java.util.logging.Logger; import […]

服务器与Jersey发送事件:客户端丢弃后,EventOutput未关闭

我正在使用jersey来实施SSE场景。 服务器保持连接活动。 并定期将数据推送给客户。 在我的方案中,存在连接限制,只有一定数量的客户端可以同时订阅服务器。 因此,当新客户端尝试订阅时,我会进行检查(EventOutput.isClosed)以查看是否有任何旧连接不再处于活动状态,因此可以为新连接腾出空间。 但EventOutput.isClosed的结果始终为false,除非客户端显式调用EventSource的close。 这意味着如果客户端意外掉线(断电或互联网切断),它仍然会占用连接,新客户端无法订阅。 有没有解决这个问题?

Java Servlet不会停止推送通知

我有一个servlet,它将HTML5服务器发送的事件发送到jsp客户端。 servlet每秒向客户端发送一次数据。 jsp客户端实例化一个新的事件源并接收数据。 当窗口即将关闭时,jsp客户端在“beforeunload”事件中关闭eventsource(如下面的代码所示)。 但是,我注意到即使客户端关闭了事件源并且浏览器退出,服务器也会继续发送数据。 至于有关eventsource的文档,使用eventsource.close()足以阻止客户端重新连接到服务器,服务器将停止发送任何进一步的推送通知。 编辑:我在此链接上阅读了StackOverflow 上的类似问题。 但是,答案是在聊天中讨论的,因此无法访问它。 任何人都可以帮助我理解为什么即使在eventsource.close()和浏览器退出后服务器也没有停止发送推送通知? 我是否写了任何其他代码来通知服务器在客户端退出后停止发送数据? 感谢帮助。 这是我简化的服务器代码: import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.text.SimpleDateFormat; /** * Servlet implementation class ServletForSSE */ @WebServlet(“/ServletForSSE”) public class ServletForSSE extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ […]

Spring REST中的SSE实现

任何人都可以使用Spring Rest提供SSE(服务器发送事件)的示例吗? 基本上我有一个请求,它的响应将由服务器以多个块发送。 我想在Spring REST Api中使用服务器和客户端实现,而不需要像泽西这样的第三方restapi。

带有附加Cookie的Server Sent Event Client

我正在尝试使用额外的cookie对Server Sent Event资源进行unit testing。 我已经在为客户端使用Jersey作为EventSource和JavaX。 以下代码工作正常: WebTarget target = ClientBuilder.newBuilder() .register(SseFeature.class) .build() .target(“http://localhost:8080/sse”); EventSource eventSource = EventSource.target(target).build(); EventListener listener = new EventListener() { @Override public void onEvent(InboundEvent inboundEvent) { LOG.info(inboundEvent.readData(String.class)); } }; eventSource.register(listener); eventSource.open(); serverEventManager.send(“/sse”, “foo”); eventSource.close(); Hoewever,对于额外的unit testing,我需要在请求中添加额外的cookie。 我已经尝试了以下内容 target.(…).request.cookie(“foo”, “bar”); 但是这会返回一个构建器,我无法从中为EventSource创建所需的WebTarget。

Java Servlet和SSE中的连接关闭

我尝试在服务器上使用Java Serlvet在我的Webapp中实现Server-Sent-Event。 是否可以在Servlet中检查客户端是否关闭了连接? 即使客户端浏览器关闭,Servlet中的循环while(true)也是无限的。 客户代码 function startLogSSE(lastEventId, level) { var eventSource = new EventSource(“log-sse?last-event-id=” + lastEventId + “&level=” + level); eventSource.onmessage = function (event) { document.getElementById(‘log’).innerHTML = event.data + “\n” + document.getElementById(‘log’).innerHTML; }; } 服务器代码 public class LogSSEServlet extends HttpServlet { private static final Logger logger = LoggerFactory.getLogger(LogSSEServlet.class); @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) […]

服务器已发送事件无法在Google Chrome中使用

这是我的服务器JSP代码“Server_Date.jsp” 这是我的客户端jsp页面“Client_Serverdate.jsp” Insert title here Getting server updates if(typeof(EventSource)!==”undefined”) { var source=new EventSource(“Server_Date.jsp”); source.addEventListener(“message”, function(event) { document.getElementById(“result”).innerHTML = event.data; }, false); } else { document.getElementById(“result”).innerHTML=”Sorry, your browser does not support server-sent events…”; } 请帮助我这个代码在Mozilla Firefox中工作正常,歌剧但不在Google Chrome中工作我用18.x和20.x检查过 它将转到我用print语句检查的服务器页面,但它没有到达“document.getElementById(”result“)行.innerHTML = event.data;” 谢谢…

服务器发送的事件不适用于泽西SSE

我正在尝试使用Jersey的JavaScript SSE。 我在我的资源中有以下代码。 我在Java7和Tomcat 7上托管。我没有收到任何错误。 但我在页面上看不到数据。 我打电话/broadcast发布数据。 它确实显示了消息。 但客户端没有任何东西。 在Firefox中,我确实看到多次触发/broadcast事件。 这是我用的参考。 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) […]

Angular 2 spring boot服务器端事件

有人可以给我一个春季启动服务器端事件的例子吗? 基本上我需要将服务器端事件推送到浏览器。 我正在使用角度2和弹簧启动后端。 请提供一个示例示例,我无法找到好的示例。 @Controller public class SSEController { private final List emitters = new ArrayList(); @RequestMapping(path = “/stream”, method = RequestMethod.GET) public SseEmitter stream() throws IOException { SseEmitter emitter = new SseEmitter(); emitters.add(emitter); emitter.onCompletion(() -> emitters.remove(emitter)); return emitter; } } 如何从服务器连续推送数据以及如何在Angular 2中订阅此事件? 提前致谢

Server-Sent-Events如何工作

我在tomcat 8.0上使用java尝试了SSE(Server-Sent-Events)。 以下是我注意到的一些事情。 我单击一个自动向servlet发出请求的按钮。 执行Servlet的GET方法,返回事件流。 收到完整的流后,页面会再次自动发出另一个请求,再次接收相同的数据! 那里没有无限循环!!! 服务器上实际发生了什么? 在正常情况下,tomcat会创建一个线程来处理每个请求。 现在发生了什么? 确保事件流只发送一次到同一个连接/浏览器会话的正确方法是什么? 确保事件流关闭且服务器上不会产生资源开销的正确方法是什么? 如何区分GET和POST请求。 为什么选择GET? 在Tomcat上使用SSE为时尚早? 任何性能问题? 这是好奇的代码, @WebServlet(“/TestServlet”) public class TestServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //content type must be set to text/event-stream response.setContentType(“text/event-stream”); //cache must be set to no-cache response.setHeader(“Cache-Control”, “no-cache”); //encoding is set to UTF-8 […]