私のシナリオでは、クライアントは「さようなら」websocketメッセージを送信し、以前に確立した接続をサーバ側で閉じる必要があります。アッカ-HTTP docsからサーバからのakka-http websocket接続を閉じる
:
閉会の接続は、(Sink.cancelledとSource.emptyにその上流にその下流に接続することにより)、サーバー・ロジックからの着信接続の流れをキャンセルすることにより可能です。また、IncomingConnectionのソース接続をキャンセルして、サーバーのソケットをシャットダウンすることもできます。
は、しかし、それは新しい接続をネゴシエートするときSink
とSource
が一度設定されていることを考慮に入れていることを行う方法を私にはっきりしていない:
(get & path("ws")) {
optionalHeaderValueByType[UpgradeToWebsocket]() {
case Some(upgrade) ⇒
val connectionId = UUID()
complete(upgrade.handleMessagesWithSinkSource(sink, source))
case None ⇒
reject(ExpectedWebsocketRequestRejection)
}
}
ありがとうございました!私が探していたもののように見えます。 – Tvaroh
残念ながら、これは 'in'フローに適用されたときにwebsocket接続(akka-http上)を閉じることはありません。たぶんそれはまた、「仕上げ」されたソースを必要とするでしょう。 – Tvaroh
はい、アッカ-HTTP彼らは「完成」しているの両方の接続をクローズします: 'Flow' - 提案として'それをfinish'ingと(出力の) 'Source'で - その基礎となる俳優を停止しています。 – Tvaroh