2017-07-11 5 views
0

私の現在のコードにすべてのデータを送信しアッカ・ストリームシンクを作成することはあり署名:HTTPエンドポイント

def putObject(key: String, contentType: ContentType, data: Source[ByteString,_]): Future[HttpReponse] 

(アッカ-HTTPクライアントに単に代表者)

私が署名をしたいと思います私はメモにすべてのバイトをバッファリングすることなく、HttpRequestのシングルのための機関として、すべてのバイト文字列を消費シンクを作成するにはどうすればよい

def putObject(key: String, contentType: ContentType): Sink[ByteString, Future[HttpReponse]] 

されるようにry?

答えて

0

ストリームを実行するコントロールを反転することは不可能です。最初のAPIでは、ユーザはライブラリの実装にSourceを与え、ライブラリがそのソースがいつ実行されるかを制御します。

第2のAPIは代わりにシンクを返します。これはまた、ストリームを実行するコントロールがユーザーに戻されることを意味します。これはサポートされていません。ストリームの一部は、Httpライブラリによってユーザーと同じストリームの別の部分で実行される必要があるためです。あなたはどうする可能性があることをAPIを変更している

val conn = Http().outgoingConnection(host = ???) 
val promise = Promise[HttpResponse] 
Flow[Source[ByteString, NotUsed]] 
    .map(data => HttpRequest(entity = HttpEntity(contentType, data))) 
    .via(conn) 
    .toMat(Sink.head)(Keep.right) 

def putObject(key: String, contentType: ContentType): Sink[Source[ByteString, NotUsed], Future[HttpResponse]] = 

と実施、その後のようになります

関連する問題