2017-11-02 3 views
2

ウェブアプリケーションにいくつかのサーバーサイドイベント(SSE)を実行したいと思います。私はすべてのSSEの配管を行っていると思う。私は今、家のAkka HTTP側にSourceを作成する必要があります。 ActorRefをSource.actorRef()から取得するにはどうすればよいですか?

は、私はあなたがこのような何かを行うことができますが見つかりました:

私は何をしたいことは、おそらく役者にメッセージを送信することにより、このソースに「公開」何とかです
val source = Source.actorRef(5, akka.stream.OverflowStrategy.dropTail) 

。私はこの呼び出しがSource<T,ActorRef>を作成することを文書から確認します。

このActorRefインスタンスを取得してメッセージを送信するにはどうすればよいですか?

+0

https://developer.lightbend.com/docs/alpakka/current/sse.htmlを使用しましたか、このインフラストラクチャを自分で作成していますか? –

+0

この例のために自分自身を書く。リンクthoをありがとう!私の運動がうまくいくならば、大人向けのバージョンはこのようなものが必要でしょう。 – Greg

答えて

2

からActorRefを取得するには、ストリームを実行する必要があります。たとえば、SSEペイロードデータ(Stringの形式)をこのアクタに送信し、そのデータをServerSentEventオブジェクトに変換してクライアントに送信するとします。何の背圧がないこと

path("events") { 
    get { 
    complete(sseSource) 
    } 
} 

注:

actor ! "quesadilla" 

そして、あなたのルートでsseSourceを使用します。今、あなたは、マテリアライズド・アクターにメッセージを送ることができます

val (actor, sseSource) = 
    Source.actorRef[String](5, akka.stream.OverflowStrategy.dropTail) 
     .map(s => /* convert String to ServerSideEvent */) 
     .keepAlive(1.second,() => ServerSentEvent.heartbeat) 
     .toMat(BroadcastHub.sink[ServerSentEvent])(Keep.both) 
     .run() 

// (ActorRef, Source[ServerSentEvent, NotUsed]) 

:あなたのような何かができますこのアプローチでは(つまり、俳優へのメッセージは発砲して忘れてしまいます)。

関連する問題