在Akka Http中,Websocket和普通的路由可以相同吗?

时间:2016-12-08 16:54:04

标签: websocket akka-http

我确实有一个场景,我希望我的websocket路由和路径路径是一样的。在Akka Http有可能吗? 考虑下面提到的代码:

def flow: Flow[Message, Message, Any] =
      Flow.fromSinkAndSource(Sink.ignore,     
         Source.single(TextMessage.Strict("Hello from websocket")))

val route =
  path("hello") {
    get {
      complete(HttpEntity(ContentTypes.`application/json`,"Simple hello"))
    }
  } ~ path("hello") {
    handleWebSocketMessages(flow)
  }

如果通过websocket客户端访问ws://localhost:8080/hello,我会收到websocket错误。但正常的卷曲请求会得到Simple hello的结果。是否有可能以某种方式在同一路线上实现两种行为。

1 个答案:

答案 0 :(得分:1)

下面的内容应该是

val route = path("hello") {
  optionalHeaderValueByType[UpgradeToWebSocket](()) {
    case Some(upgrade) => complete(upgrade.handleMessages(flow))
    case None => get {
      complete("Simple hello")
    }
  }
}