@scala_ru

Страница 1129 из 1499
sherzod
08.12.2017
09:04:12
это ж к контенту относится, вроде ничего не мешает вернуть multipart

Nick
08.12.2017
09:04:22
Ну вот, мне никто не ответил, опять в исходники опенждк идти(

Aleksey
08.12.2017
09:05:37
Henadz
08.12.2017
09:05:39
Google
Henadz
08.12.2017
09:05:49
ты реквест шлёшь

а тебе мультипартом файл сливается

я как то делал
т.е. ты файл возвращал множественными респонзами?

Denis
08.12.2017
09:07:07
Множественный респонз )))

Aleksey
08.12.2017
09:07:18
а тебе мультипартом файл сливается
Это не мультипарт похоже. Мутирарт это несколько видов контента в одно теле

sherzod
08.12.2017
09:08:06
Умеют ли браузеры такой контент парсить?
насчет браузеров не знаю, но в ресте, в почтах всяких часто вижу такое

Vadim
08.12.2017
09:08:20
Chunked это

Aleksey
08.12.2017
09:08:23
а тебе мультипартом файл сливается
Видимо речь об офсетах. Типа хочу файл с 100500 байта

Так?

Aleksei
08.12.2017
09:09:25
скорее всего да

Henadz
08.12.2017
09:09:37
Видимо речь об офсетах. Типа хочу файл с 100500 байта
ну основная суть, что нужно не одним респонзом весь большой файл отдавать, а по кускам

sherzod
08.12.2017
09:09:50
ну да это тогда _не_ про multipart

Google
Henadz
08.12.2017
09:09:57
а

сорри тогда, спутал терминологию

Denis
08.12.2017
09:10:52
чтобы тот читал файл по мере отправления

Aleksey
08.12.2017
09:11:10
ну основная суть, что нужно не одним респонзом весь большой файл отдавать, а по кускам
Запросов (сокетов) несколько? Если несколько это офсеты. Если один, то чанкед как подсказывает Вадим.

Denis
08.12.2017
09:11:11
кусками

Henadz
08.12.2017
09:11:35
в этом и был затык, я думал это называется multipart type

Можно скормить Source[Array[Byte]]
т.е. можно жахнуть просто complete(source) и акка это захендлит?

sherzod
08.12.2017
09:12:27
multipart это когда разные типы контента в одном "сообщении"

Henadz
08.12.2017
09:12:31
есть анмаршаллер для сорсов?

Aleksey
08.12.2017
09:12:33
один да, да, уже нагуглил кое-что про chunked спасибо
Смотри еще про бэкпрэши всякие. Это киллер-фича акка-хттп.

Henadz
08.12.2017
09:15:36
да
ну тогда это вообще шикарно ) ушёл пробовать, спасибо

Denis
08.12.2017
09:16:10
https://doc.akka.io/docs/akka-http/current/scala/http/routing-dsl/source-streaming-support.html

Походу обманул немного

А нет

Source[ByteString, _]

чет не разжигается никак, слишком толсто?

Nikolay
08.12.2017
09:25:39
где толсто?

Google
Denis
08.12.2017
09:25:50
в чатике жвм

Kirill
08.12.2017
09:27:32
не знаю, они слишком агрессивно себя ведут, там либо хамить в ответ (некрасиво), либо я не знаю как, но похоже будет трудно

Nikolay
08.12.2017
09:30:11
печальное место там

Alexandr
08.12.2017
09:32:26
люди большую часть своего рабочего времени геттеры-сеттеры пишут, чего вы от них хотите, надо к ним с сожалением и пониманием относиться

Alex
08.12.2017
09:40:23
Denis
08.12.2017
09:46:40
Уф, умылся дермецом ))

Sergey
08.12.2017
10:06:51
скаланы, как поставить локально sbt-1.1.0-RC1 через brew ?

Nikolay
08.12.2017
10:07:28
А почему не через build.properties?

Denis
08.12.2017
10:07:30
Ты можешь просто в build.properties указать нужную версию

Aleksey
08.12.2017
10:07:37
Denis
08.12.2017
10:07:52
Кто нибудь уже сказал про build.properties ?

Sergey
08.12.2017
10:07:57
=D

Sergey
08.12.2017
10:08:21
ставил, vscode с плагином пробую, который требует 1.1.0-RC1 — что-то не работает, локально что ли sbt запускает

Henadz
08.12.2017
10:09:41
возвращаясь к вопросу о стриминге файла в ответ на хттп реквест

код на akka-http я вроде написал, вот только как теперь проверить это реквестом?

банально вот эта штука complete(HttpEntity.Chunked(ContentTypes.`text/plain(UTF-8)`, Source.repeat("hello").limit(10).map(ChunkStreamPart.apply)))

ни через браузер ни через curl нормально не отрабатывает

Sergey
08.12.2017
10:17:39
нужно в консоли руками запускать
ага, уже понял и сделал, jump to definition один фиг не работает =\

Google
Henadz
08.12.2017
10:17:54
а что происходит?
вот например в консоли ответ ➜ ~ curl -G http://localhost:8080/hello curl: (56) Recv failure: Connection reset by peer

из браузера тупо This site can’t be reached

Daniel
08.12.2017
10:18:25
так ты даже не подключился, о роутах речи уже нет

Denis
08.12.2017
10:18:32
ты уверен что коннект то есть?

сервер запустил?

Http().bindAndHandle

sherzod
08.12.2017
10:24:07
подключился, recv же

curl -vvv все остальное

надо ему три раз подмигнуть

Henadz
08.12.2017
10:26:23
Admin
ERROR: S client not available

Henadz
08.12.2017
10:26:34
Http().bindAndHandle
это всё есть, в логах Server online at http://localhost:8080/ Press RETURN to stop...

sherzod
08.12.2017
10:26:46
да подключился ты. сделай verbose

Denis
08.12.2017
10:27:07
Прекрасные моменты

По крайней мере, теперь я нашёл ответ на это: Пушто ФПшники в мире энтерпрайза. И защищают не скалу, а ФП.

sherzod
08.12.2017
10:27:08
возможно подключился не к серверу, но подключился)

Henadz
08.12.2017
10:27:13
* Trying ::1... * TCP_NODELAY set * Connection failed * connect to ::1 port 8080 failed: Connection refused * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8080 (#0) > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 200 OK < Server: akka-http/10.0.11 < Date: Fri, 08 Dec 2017 10:26:51 GMT < Transfer-Encoding: chunked < Content-Type: text/plain; charset=UTF-8 < * Recv failure: Connection reset by peer * stopped the pause stream! * Closing connection 0

Denis
08.12.2017
10:27:55
Странно

Henadz
08.12.2017
10:28:05
+

sherzod
08.12.2017
10:28:24
покажи код на сервере

Google
Henadz
08.12.2017
10:29:21
всё максимум просто

sherzod
08.12.2017
10:29:38
весь код пож-ста

Henadz
08.12.2017
10:29:42
val route = path("hello") { get { complete(HttpEntity.Chunked(ContentTypes.`text/plain(UTF-8)`, Source.repeat("hello").limit(10).map(ChunkStreamPart.apply))) } } val bindingFuture = Http().bindAndHandle(route, "localhost", 8080) println(s"Server online at http://localhost:8080/\nPress RETURN to stop...") StdIn.readLine() bindingFuture .flatMap(_.unbind()) .onComplete(_ => system.terminate())

это весь код в мейне

ну и implicit val system = ActorSystem("Data-export") implicit val mat = ActorMaterializer() в начале

Denis
08.12.2017
10:30:59
А если просто complete(Source.repeat("hello").limit(10).map(ByteString(_))) или типа того?

Henadz
08.12.2017
10:31:46
the same

А если просто complete(Source.repeat("hello").limit(10).map(ByteString(_))) или типа того?
просто сорс в комплит не вернёшь, нужен маршаллер, поэтому я заворачивал в HttpEntity

Ilya
08.12.2017
10:32:25
private def handling[Ex <: Throwable, T](exType: Class[Ex])(block: => T): Either[Ex, T] = catching(exType).either(block).asInstanceOf[Either[Ex, T]] Подскажите плиз при такой обработке ошибки насколько костыльно использовать asInstanceOf?

Как пример использования: handling(classOf[DateTimeParseException])(opt map ZonedDateTime.parse)

Henadz
08.12.2017
10:34:23
* Trying ::1... * TCP_NODELAY set * Connection failed * connect to ::1 port 8080 failed: Connection refused * Trying 127.0.0.1... * TCP_NODELAY set * Connected to localhost (127.0.0.1) port 8080 (#0) > GET /hello HTTP/1.1 > Host: localhost:8080 > User-Agent: curl/7.54.0 > Accept: */* > < HTTP/1.1 200 OK < Server: akka-http/10.0.11 < Date: Fri, 08 Dec 2017 10:34:13 GMT < Transfer-Encoding: chunked < Content-Type: text/plain; charset=UTF-8 < * Recv failure: Connection reset by peer * stopped the pause stream! * Closing connection 0

вот, всё тоже самое

Artem
08.12.2017
10:59:47
как нынче модно тестировать софт? например написал я одну фигню. И написал к ней генератор траффика. Где подешевле все это запустить можно? В амазоне дороха

sherzod
08.12.2017
11:01:09
@Insferatu попробуй Source.repeat("hello\n")

либо trottle добавить как здесь https://github.com/calvinlfer/akka-http-streaming-response-examples/blob/master/src/main/scala/com/experiments/calvin/chunked/http/ChunkedStreamingRoutes.scala

.throttle(elements = 1000, per = 1 second, maximumBurst = 1, mode = ThrottleMode.Shaping)

Henadz
08.12.2017
11:03:18
ща чекну throttle

sherzod
08.12.2017
11:03:54
val s = Source.repeat("hello\n").limit(10).map(ChunkStreamPart(_)) val route = path("hello") { get { complete(HttpEntity.Chunked(ContentTypes.`text/plain(UTF-8)`, s)) } } вот это работает

Artem
08.12.2017
11:04:41

Страница 1129 из 1499