Akka WebSocket server. Как получить url клиента
Потихоньку изучаю akka. Появился вопрос: как мне получить информацию о клиенте, который подключается к сокету? Имею ввиду следующее: когда я на клиенте подключаюсь к сокету, то в url этого сокета я могу указать некоторые данные. Что-то вроде id клиента, его система(iOS/Android/Web) и так далее. Для примера: ws://localhost:8080/ws?as=iOS&id=123
Мой код:
fun main() {
val system = ActorSystem.create("system")
val materializer = Materializer.createMaterializer(system)
val connectionsController = system.actorOf(Props.create(ConnectionsController::class.java))
val http = Http.get(system)
val routeFlow = path("ws") {
handleWebSocketMessages(mainFlow(connectionsController))
}.flow(system, materializer)
http.bindAndHandle(routeFlow, ConnectHttp.toHost("0.0.0.0", 8080), materializer).thenRun {
println("Web socket server is running at : localhost:8080")
}
}
fun mainFlow(connectionsController: ActorRef): Flow<Message, Message, NotUsed> {
val source = Source.actorRef<Message>(
{ Optional.empty() },
{ Optional.empty() },
100,
OverflowStrategy.dropNew())
.mapMaterializedValue {
println("A user connected")
NotUsed.getInstance()
}
val sink: Sink<Message, NotUsed> = Flow.create<Message>()
.map {
println("A Message received")
// println(it.asTextMessage().strictText)
}
.to(Sink.onComplete {
println("A user disconnected")
})
return Flow.fromSinkAndSource(sink, source)
}
Ответы (1 шт):
Автор решения: benifest
→ Ссылка
val routeFlow = path("ws") {
get {
parameter("as") { sys ->
parameter("id") { id ->
parameter("v") { v ->
handleWebSocketMessages(mainFlow(connectionsController, sys, id, v))
}
}
}
}
}.flow(system, materializer)
ws://localhost:8080/ws?as=iOS&id=123&v=123