5

最初にリクエストをサーバーに送信し、その返信を待つクライアントアプリを実装したい(httpと同様)

私のクライアントプロセスは

 val topic = async.topic[ByteVector]
 val client = topic.subscribe

ここにアピがあります

trait Client {
  val incoming = tcp.connect(...)(client)
   val reqBus = topic.pubsh()
   def ask(req: ByteVector): Task[Throwable \/ ByteVector] =  {
      (tcp.writes(req).flatMap(_ => tcp.reads(1024))).to(reqBus)
      ???
   }
}

次に、残りの部分を実装する方法はask

4

1 に答える 1

6

通常、実装は、シンクを介してメッセージを公開し、トピックなどのソースで何らかの返信を待つことで行われます。

実際、私たちのコードにはこれに関するイディオムがたくさんあります:

def reqRply[I,O,O2](src:Process[Task,I],sink:Sink[Task,I],reply:Process[Task,O])(pf: PartialFunction[O,O2]):Process[Task,O2] = {
 merge.mergeN(Process(reply, (src to sink).drain)).collectFirst(pf)
}

基本的に、この最初のフックは応答ストリームにフックしてO、リクエストが送信されたことを確認する結果を待ちます。次に、メッセージを発行し、着信が最終的に翻訳されて終了するようにI相談します。pfOO2

于 2015-01-19T09:03:11.633 に答える