事件源和 Internet Explorer

Posted

技术标签:

【中文标题】事件源和 Internet Explorer【英文标题】:EventSource and Internet Explorer 【发布时间】:2014-05-01 16:37:45 【问题描述】:

我有以下服务器端播放代码,以便为 html5 EventSources 提供端点。

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"
    )
  


我的路线是这样的

GET /events controllers.Application.events

当 Chrome 浏览器通过 EventSource 对象附加自身时,此服务器可以正常工作。由于 IE 不支持 EventSources,我使用的是 this polyfill 库。现在的问题:IE 正确订阅了事件,因为我看到了“已连接并已订阅”的日志输出,但只要将事件传递给此连接,它就会记录“SSE 已断开连接”。我在这里想念什么?一些http头?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于事件源和 Internet Explorer的主要内容,如果未能解决你的问题,请参考以下文章

java中事件,事件源和事件监听器概念,使用事件监听器惊醒事件处理的过程?

Linux之实现Internet,DNS架构

构建安全的园区网络

构建安全的园区网络

我需要一个事件来检测 Internet 连接/断开连接

我需要一个事件来检测Internet连接/断开连接