การสตรีมออบเจ็กต์ JSON โดยใช้การตอบสนองแบบ akka http chunked

การใช้ 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)

อัปเดต:

  1. รับประกันหรือไม่ว่าชิ้นที่ฉันส่งจะเหมือนกันในฝั่งไคลเอ็นต์
  2. เป็นไปได้ไหมที่จะมีการตอบสนองด้วยจำนวนชิ้นส่วนที่ไม่มีที่สิ้นสุด?
  3. Content-Type ที่เหมาะสมสำหรับการตอบกลับประเภทนี้คืออะไร

อัปเดต 2:

Akka 2.4.9 เพิ่มความสามารถในการตอบสนองต่อสตรีม และโดยพื้นฐานแล้วจะทำสิ่งเดียวกันทุกประการโดยให้น้ำตาลไวยากรณ์บางส่วน ดูเอกสาร .


person Denis Mikhaylov    schedule 05.07.2016    source แหล่งที่มา
comment
กังวลส่วนไหน? ทุกอย่างดูเหมือนจะเป็นหม้อต้มตั้งแต่แรกเห็น...   -  person Ramón J Romero y Vigil    schedule 05.07.2016
comment
1. รับประกันหรือไม่ว่าชิ้นที่ฉันส่งจะเหมือนกันในฝั่งไคลเอ็นต์   -  person Denis Mikhaylov    schedule 05.07.2016
comment
2. เป็นไปได้ไหมที่จะมีการโต้ตอบกับชิ้นส่วนจำนวนไม่สิ้นสุด?   -  person Denis Mikhaylov    schedule 05.07.2016
comment
ฉันได้อัปเดตคำถามแล้ว   -  person Denis Mikhaylov    schedule 05.07.2016
comment
@DenisMikhaylov นอกจากนี้ จะเกิดอะไรขึ้นหากไคลเอนต์ปิดการเชื่อมต่อใน b/w แต่เซิร์ฟเวอร์ไม่มีทางรู้ได้ เซิร์ฟเวอร์คิดว่าไคลเอนต์ใช้งานช้าและยังคงบัฟเฟอร์การตอบสนองอยู่ จะจัดการกับสถานการณ์เหล่านี้ได้อย่างไร?   -  person curious    schedule 26.06.2017
comment
@curious มีการตั้งค่า idle connection timeout สำหรับสถานการณ์ดังกล่าว   -  person Denis Mikhaylov    schedule 26.06.2017


คำตอบ (1)


ตอบคำถามของคุณตามลำดับ:

  1. ใช่ ลูกค้าจะได้รับ BytesString การแสดงออบเจ็กต์ของคุณที่เข้ารหัสใน json
  2. ใช่ การมีแหล่งสตรีมบนฝั่งเซิร์ฟเวอร์ซึ่งไม่มีวันสิ้นสุดก็เป็นเรื่องปกติ
  3. เนื้อหาที่คุณระบุในคำถาม (application/json) ถูกต้อง
person Ramón J Romero y Vigil    schedule 05.07.2016