На этом http://doc.akka.io/docs/akka/2.4.9/scala/http/client-side/request-level.html#Future-Based_Variant внизу есть предупреждение:
Обязательно используйте объекты ответа
dataBytes:Source[ByteString,Unit]
, например, подключив его к приемнику (например,response.entity.dataBytes.runWith(Sink.ignore)
, если вам не нужен объект ответа), поскольку в противном случае Akka HTTP (и базовая инфраструктура Streams) поймет отсутствие потребления объекта. в качестве сигнала обратного давления и прекратить чтение из основного TCP-соединения!Это функция Akka HTTP, которая позволяет потреблять объекты (и извлекать их по сети) в потоковом режиме и только по запросу, когда клиент готов использовать байты — хотя поначалу это может показаться немного удивительным.
Почему это не нужно в случае, когда код состояния ответа не StatusCodes.OK
? Или это действительно необходимо, а пример кода, показанный на этой странице (также ниже), отсутствует?
def receive = {
case HttpResponse(StatusCodes.OK, headers, entity, _) =>
log.info("Got response, body: " + entity.dataBytes.runFold(ByteString(""))(_ ++ _))
case HttpResponse(code, _, _, _) =>
//why not here?
log.info("Request failed, response code: " + code)
}