Ошибка при загрузке больших файлов JSON с помощью Scala Play Framework 2

Я пытаюсь использовать Apache Bench для загрузки тестовой группы больших (по 4 МБ) запросов JSON. При работе с большим файлом и множеством одновременных запросов я получаю следующую ошибку:

Исключение, пойманное в RequestBodyHandler java.nio.channels.ClosedChannelException: null

Вот моя команда ab:

ab -p large.json -n 1000 -c 10 http://127.0.0.1:9000/json-tests

Если я запускаю это без параллелизма и только с 10 запросами, все работает нормально. Увеличение количества запросов или параллелизма приводит к тому, что эта ошибка возникает снова и снова.

В моем контроллере в настоящее время нет логики:

def addJsonTest = Action {
  Ok("OK")
}

Вот полная ошибка:

[ошибка] play — исключение, обнаруженное в RequestBodyHandler java.nio.channels.ClosedChannelException: null at org.jboss.netty.channel.socket.nio.AbstractNioWorker.setInterestOps(AbstractNioWorker.java:506) [netty-3.9.3.Final. jar:na] на org.jboss.netty.channel.socket.nio.AbstractNioWorker$1.run(AbstractNioWorker.java:455) [netty-3.9.3.Final.jar:na] на org.jboss.netty.channel. socket.ChannelRunnableWrapper.run(ChannelRunnableWrapper.java:40) [netty-3.9.3.Final.jar:na] в org.jboss.netty.channel.socket.nio.AbstractNioSelector.processTaskQueue(AbstractNioSelector.java:372) [netty -3.9.3.Final.jar:нет] на org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:296) [netty-3.9.3.Final.jar:нет]

Это просто использование Play в режиме разработки, есть ли какие-либо настройки или конфигурации для обработки нескольких больших запросов Play?

Спасибо!


person Dalton001    schedule 07.11.2014    source источник


Ответы (1)


Вам нужно сделать это реактивно, с итераторами

  val iteratee = Iteratee.foldM[Array[Byte], Either[Result, String]](Right("start")) { case (str, bytes) =>
      Future.successful(Left(Ok))
  }

  val parser = BodyParser(rh => iteratee)


  def eatDust = Action(parser) { req =>
    Ok
  }

Посмотрите эти ссылки.

https://www.playframework.com/documentation/2.2.x/Iteratees

Play 2.x: реактивная загрузка файла с помощью Iteratees

person Stephen    schedule 08.11.2014