我正在玩弄 PlayFramework 2.2 中的 WebSockets。我想对初始请求做一些检查并可能返回适当的 HTTP 状态。原则上它看起来像这样,在 this question 中询问:
def ws(username: String) = {
if (username == "asoliman")
Action { request =>
Forbidden("Soliman is not allowed here")
}
else
WebSocket.using[String] { request =>
val in = Iteratee.foreach[String]( s => println("got: " + s)).mapDone(_ => println("Disconnected"))
val out = Enumerator[String]("Ahmed", "Mohamed", "Ibrahim").andThen(Enumerator.enumInput(Input.EOF))
(in, out)
}
}
如前所述,这是不可能的,因为 WebSocket 的 using
和 async
需要返回一个 Tuple2[Iteratee, Enumerator]
.
有推荐的方法吗? 或者,有没有办法发送 Websocket's Status Codes ?
最佳答案
2015 年 10 月 7 日更新:
在较新的 PlayFramework 版本中,可以拒绝连接并因此返回,比如说,禁止状态。在此处查看文档:https://www.playframework.com/documentation/2.4.x/ScalaWebSockets
原始答案:
答案是,目前无法使用 PlayFramework 2.2。常规 HTTP 状态不可行,因为响应需要是 WebSocket(通过使用/异步),并且未实现 WebSocket 状态。我在他们的 repo 协议(protocol)中提出了一个关于它的问题,我们需要等待 future 的发布——或者为实现它做出贡献:-)
关于scala - PlayFramework Websocket HTTP 状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19645491/