Streaming objek JSON menggunakan respons chunked akka http

Apakah menggunakan akka-http seperti ini merupakan penyalahgunaan atau berbahaya?

Di server

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))
        )
      }
    }
  }
}

Kemudian di sisi klien

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. Apakah dijamin potongan yang saya kirim akan sama di sisi klien.
  2. Bolehkah mendapat respons dengan jumlah potongan yang mungkin tidak ada habisnya?
  3. Tipe Konten apa yang tepat untuk respons seperti ini?

UPD 2:

Akka 2.4.9 menambahkan kemampuan untuk merespons dengan aliran. Dan pada dasarnya melakukan hal yang persis sama, memberikan beberapa gula sintaksis. Lihat dokumen .


person Denis Mikhaylov    schedule 05.07.2016    source sumber
comment
Bagian mana yang Anda khawatirkan? Sekilas semuanya tampak seperti pelat ketel...   -  person Ramón J Romero y Vigil    schedule 05.07.2016
comment
1. Apakah dijamin potongan yang saya kirim akan sama di sisi klien.   -  person Denis Mikhaylov    schedule 05.07.2016
comment
2. Bolehkah mendapat respons dengan jumlah potongan yang mungkin tidak terbatas?   -  person Denis Mikhaylov    schedule 05.07.2016
comment
Saya telah memperbarui pertanyaan.   -  person Denis Mikhaylov    schedule 05.07.2016
comment
@DenisMikhaylov Selain itu, Apa yang terjadi jika Klien menutup koneksi secara b/w, tetapi server tidak memiliki cara untuk mengetahuinya, server menganggap klien lambat dalam mengonsumsi dan terus melakukan buffering pada respons. Bagaimana cara menangani skenario ini?   -  person curious    schedule 26.06.2017
comment
@curious Ada pengaturan idle connection timeout untuk skenario seperti itu   -  person Denis Mikhaylov    schedule 26.06.2017


Jawaban (1)


Menjawab pertanyaan Anda secara berurutan:

  1. Ya, klien akan menerima BytesString representasi objek Anda yang dikodekan dalam json.
  2. Ya, boleh saja memiliki sumber aliran di sisi server yang tidak pernah berhenti.
  3. Konten yang Anda tentukan dalam pertanyaan (application/json) sudah benar.
person Ramón J Romero y Vigil    schedule 05.07.2016