目標が返さソースがシンクが受信するどの発するこの署名シンクとシンクが
def bindedSinkAndSource[A]:(Sink[A, Any], Source[A, Any]) = ???
で機能を実現することである受信どんな放射するソースを作成アッカストリーム機能。
私の主な目標は、handleWebSocketMessagesディレクティブによってWebSocketのフォワーダを実装することです。
フォワーダグラフである:
leftReceiver ~> rightEmitter
leftEmitter <~ rightReceiver
leftEmiter
leftReceiver
とがであり
、左エンドポイントハンドラの流れのうち。 rightReceiver
およびrightEmitter
は、右エンドポイント・ハンドラー・フローの内外にあります。例えば
:
import akka.NotUsed
import akka.http.scaladsl.model.ws.Message
import akka.http.scaladsl.server.Directive.addByNameNullaryApply
import akka.http.scaladsl.server.Directives._
import akka.http.scaladsl.server.Route
import akka.stream.scaladsl.Flow
import akka.stream.scaladsl.Sink
import akka.stream.scaladsl.Source
def buildHandlers(): Route = {
val (leftReceiver, rightEmitter) = bindedSinkAndSource[Message];
val (rightReceiver, leftEmitter) = bindedSinkAndSource[Message];
val leftHandlerFlow = Flow.fromSinkAndSource(leftReceiver, leftEmitter)
val rightHandlerFlow = Flow.fromSinkAndSource(rightReceiver, rightEmitter)
pathPrefix("leftEndpointChannel") {
handleWebSocketMessages(leftHandlerFlow)
} ~
pathPrefix("rightEndpointChannel") {
handleWebSocketMessages(rightHandlerFlow)
}
}
handleWebSocketMessages(..)
ディレクティブは、受信したフローのマテリアライズド値へのアクセスを与えていないという事実に不満を感じた私のところに来たすべてのアイデア。
GraphStageを使用することができます 、http://doc.akka.io/docs/akka/2.4.10/scala/stream/stream-customize.html – gaston
@gaston、私はそれを試みましたが、私はしませんでした方法を見つけ出す。私が知る限り、結果の形状はポートのタイプと数によって異なります。そして、2つのグラフステージをポートを介さずにバインドする方法が見つけられませんでした。私にヒントを送ってもらえますか? – Readren