gpt4 book ai didi

html - 事件源和 Internet Explorer

转载 作者:搜寻专家 更新时间:2023-10-31 21:50:03 25 4
gpt4 key购买 nike

我有以下服务器端 Play 代码,以便为 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填充库。现在的问题是:IE 正确地订阅了事件,因为我看到了“已连接和订阅”的日志输出,但是只要将事件传递给此连接,它就会记录“SSE 已断开连接”。我在这里错过了什么?一些 http header ?

最佳答案

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

关于html - 事件源和 Internet Explorer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22607423/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com