当前位置: 首页 > 知识库问答 >
问题:

EventSource和Internet Explorer

康鹏云
2023-03-14

我有以下服务器端播放代码,以便为HTML5事件源提供endpoint。

package controllers

import scala.util.matching
import play.api.mvc._
import play.api.libs.json.JsValue
import play.api.libs.iteratee.{Concurrent, Enumeratee}
import play.api.libs.EventSource
import play.api.libs.concurrent.Execution.Implicits._

object Application extends Controller {

  /** Central hub for distributing chat messages */
  val (eventOut, eventChannel) = Concurrent.broadcast[JsValue]

  /** Enumeratee for filtering messages based on eventSpec */
  def filter(eventSpec: String) = Enumeratee.filter[JsValue] {
    json: JsValue => ("(?i)" + eventSpec).r.pattern.matcher((json \ "eventSpec").as[String]).matches
  }

  /** Enumeratee for detecting disconnect of SSE stream */
  def connDeathWatch(addr: String): Enumeratee[JsValue, JsValue] = 
    Enumeratee.onIterateeDone{ () => println(addr + " - SSE disconnected") }

  /** Controller action serving activity based on eventSpec */
  def events = Action { req =>
    println(req.remoteAddress + " - connected and subscribed for '" + eventSpec +"'")
    Ok.feed(eventOut
      &> filter(eventSpec) 
      &> Concurrent.buffer(50) 
      &> connDeathWatch(req.remoteAddress)
      &> EventSource()
    ).as("text/event-stream").withHeaders(
      "Access-Control-Allow-Origin" -> "*",
      "Access-Control-Allow-Methods" -> "GET",
      "Access-Control-Allow-Headers" -> "Content-Type"
    )
  }

}

我的路线是这样的

获取/事件控制器。应用事件

当Chrome浏览器通过EventSource对象连接自身时,该服务器工作正常。由于IE不支持EventSources,所以我正在使用此polyfill库。现在的问题是:IE正确地订阅了事件,正如我看到的“已连接并订阅”日志输出一样,但一旦事件应传递到此连接,它就会记录“SSE disconnected”。我错过了什么?一些http头?

共有1个答案

羊舌诚
2023-03-14

看起来您可能正在使用CORS。(您正在发送CORS标头。)如果是这样,那可能是问题所在,因为您使用的polyfill不支持CORS。如果您需要CORS,可以使用此polyfill代替。

 类似资料:
  • 我正在处理服务器发送的事件。 参考链接:http://sinhamohit.com/writing/spring-boot-reactive-sse 上面的例子包括Spring Boot和WebFlux的SSE。 Spring WebFlux和HTML5 EventSource有任何可用的示例吗?

  • 我想为我的网站创建实时通知。 参考链接:http://sinhamohit.com/writing/spring-boot-reactive-sse 我该怎么做呢?参考,链接和例子将是伟大的。

  • EventSource的onmessage方法不执行,浏览器控制台的EventStream中能看到后台推送的消息,是为什么呢?

  • 问题内容: 双方的WebSockets和服务器发送的事件能够将数据推送到浏览器。在我看来,它们似乎是竞争技术。它们之间有什么区别?您何时会选择一个? 问题答案: Websocket和SSE(服务器发送事件)都能够将数据推送到浏览器,但是它们不是竞争技术。 Websockets连接既可以将数据发送到浏览器,也可以从浏览器接收数据。可以使用websockets的应用程序的一个很好的例子是聊天应用程序。

  • 我正在尝试实现一个简单的、最基本的微型web服务器,它的主要任务是向客户端发送简单的HTML/JS页面,然后对其进行实时更新。实现传输层非常简单,但我在服务器端实现EventSource时遇到了令人惊讶的困难。最初我尝试了这种简单的方法: TLDR:基本上,我只是每秒推送一个包在头上的“更新”。结果一点也不好: 浏览器只接收到第一个更新,所有后续更新都被忽略。更糟糕的是,当浏览器在10秒后对Eve

  • 问题内容: 我一直在开发一个nodejs服务器,以便为我正在使用HTML5开发的新网站提供服务器端事件。 当我通过telnet到服务器时,它可以正常工作,向我发送所需的HTTP响应标头,然后再发送一系列事件,这些事件我目前每2或3秒生成一次,以证明其有效。 我尝试了最新版本的FireFox,Chrome和Opera,它们创建了EventSource对象并连接到nodejs服务器,但没有一个浏览器会