我确实有一个场景,我希望我的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
的结果。是否有可能以某种方式在同一路线上实现两种行为。
答案 0 :(得分:1)
下面的内容应该是
val route = path("hello") {
optionalHeaderValueByType[UpgradeToWebSocket](()) {
case Some(upgrade) => complete(upgrade.handleMessages(flow))
case None => get {
complete("Simple hello")
}
}
}