2016-07-05 90 views
0

是否濫用或以某種方式使用akka-http這種危險?使用akka http分塊響應流式傳輸JSON對象

在服務器

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. 什麼是正確的內容類型這種迴應?

UPD 2:與流響應

阿卡2.4.9附加能力。基本上完全一樣,提供一些語法糖。 查看docs

+0

你關心哪部分?這一切似乎是第一眼看到鍋爐... –

+0

1.是否保證我發送的塊將在客戶端一樣。 –

+0

2.可能有無數塊的響應可以嗎? –

回答

1

回答你的問題依次是:

  1. 是,客戶端將收到JSON編碼的對象BytesString表示。
  2. 是的,在服務器端擁有永不終止的流源是很好的。
  3. 您在問題(application/json)中指定的內容是正確的。