PlayFramework Websocket HTTP状态

3

我正在尝试使用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的usingasync需要返回一个Tuple2[Iteratee,Enumerator]

有没有推荐的方法? 或者,有没有办法发送 WebSocket的状态码

1个回答

1

2015年10月7日更新:

在较新的PlayFramework版本中,可以拒绝连接并返回例如Forbidden状态。请查看此处文档:https://www.playframework.com/documentation/2.4.x/ScalaWebSockets

原始回答:

回答是,目前在PlayFramework 2.2中不可能实现。常规HTTP状态不能作为响应,因为需要通过使用/异步来传递WebSocket,而WebSocket状态未被实现。我在他们的repo中提出了一个问题,我们需要等待未来的版本 - 或者为其做出贡献 :-)。


“PlayFramework 2.3或PlayFramework 2.4中是否实现了WebSocket状态码?” 我如何在WebSocket响应中返回响应代码? - SKK
我不知道这是否是您正在寻找的内容,但是在与actors一起使用websocket时,有一种拒绝websocket连接的方法:请参见https://www.playframework.com/documentation/2.4.x/ScalaWebSockets。 - ticofab

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接