繁体   English   中英

使用Scala Play Framework 2加载大型JSON文件时出错

[英]Error loading large JSON files using Scala Play Framework 2

我正在尝试使用Apache Bench加载测试一组大型(每个4MB)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")
}

这是完整的错误:

[错误]播放-RequestBodyHandler java.nio.channels.ClosedChannelException中捕获了异常:org.jboss.netty.channel.socket.nio.AbstractNioWorker.setInterestOps(AbstractNioWorker.java:506)为null [netty-3.9.3.Final。 jar:na]在org.jboss.netty.channel上的org.jboss.netty.channel.socket.nio.AbstractNioWorker $ 1.run(AbstractNioWorker.java:455)[netty-3.9.3.Final.jar:na]。 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:na]位于org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:296)[netty-3.9.3.Final.jar:na]

这只是在开发模式下使用Play,是否有任何设置或配置可让Play处理多个大请求?

谢谢!

您需要使用迭代器来进行反应

  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

播放2.x:使用Iteratees上传反应性文件

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM