使用akka http chunked response

时间:2016-07-05 09:43:30

标签: akka akka-stream akka-http

使用像这样的akka​​-http是滥用还是某种危险?

在服务器上

def source(consumerOffset: UUID) = 
  readJournal.eventsByTag(“MyTag", consumerOffset).map(_.asJson)

pathPrefix("stream" / Segment.map(UUID.fromString)) { offset =>
  pathEndOrSingleSlash {
    get {
      complete {
        HttpResponse(
          StatusCodes.OK,
          entity = HttpEntity(ContentTypes.`application/json`, source(offset))
        )
      }
    }
  }
}

然后在客户端

Source.single(HttpRequest("http://localhost:9000/stream"))
  .mapAsync(1) { r =>
    Http().singleRequest(r).map { res =>
      res.entity.dataBytes.map(_.parse[Event])
    }
  }
  .flatMapConcat(identity).mapAsync(processEvent)

UPD:

  1. 是否保证我发送的块在客户端是相同的。
  2. 是否可以回复可能无数的块?
  3. 此类响应的内容类型是什么?
  4. UPD 2:

    Akka 2.4.9增加了回应流的能力。并且基本上完全相同,提供一些语法糖。 请参阅docs

1 个答案:

答案 0 :(得分:1)

按顺序回答您的问题:

  1. 是的,客户端将收到以json编码的对象的BytesString个表示。
  2. 是的,在服务器端拥有一个永不终止的流源是可以的。
  3. 您在问题(application/json)中指定的内容是正确的。