Akka http文件流不会从不同的客户端写入超过'n'大小的字节

时间:2017-07-28 11:21:59

标签: akka-stream akka-http

`Akka http 10.0.6;
 max-content-length is set to 6000m` 

我使用Akka文件流上传大文件(以octet-stream形式发送到我的服务)接受传入的字节并将其写入文件接收器。这是我从实验中观察到的..我阅读文档的有限理解是客户端应该能够继续发送数据,除非我们明确告诉akka http的背压机制..一直在网上搜索了解这种行为,不能要了解这一点,以解释以下行为..代码中是否有我遗漏的东西?我该如何调试呢?此外,通过scalatest,能够做到这一点。如果有人可以通过stalatest和curl / http客户端的行为差异投入更多的力量。谢谢

  1. 通过“ curl ”,我可以直播最大1KB 大小的文件。除此之外的任何东西,它都会挂起,无论我等待多长时间(20秒,5分钟,10分钟等),都会在超时后发出此消息“在收到请求结束前发送2xx'早期'响应。请注意,在此响应之后将关闭连接。此外,许多客户端将不会读取早期响应!请考虑仅在请求数据完全读取后发出此响应!“
  2. 通过“ Apache http客户端”,最大128KB 大小的文件流发生。除此之外,它将挂起和来自akka http服务的#1中的相同消息
  3. 通过“ python客户端”,发生最大~26KB 大小的文件流。除此之外,它将挂起和来自akka http服务的#1中的相同消息
  4. 通过服务中的 scalatest ,可以上传 200MB,400MB等文件
  5. 这是代码..

    `put {
       withoutSizeLimit {
           extractDataBytes { bytes =>
    
    
               implicit val system = ActorSystem()
    
               implicit val materializer = ActorMaterializer()
               // Tried system dispatcher also
               implicit val executionContext = system.dispatchers.lookup("dispatcher")
               val sink = FileIO.toPath(Paths.get("/file.out"))
               val action = bytes.runWith(sink).map {
                    case ior if ior.wasSuccessful => {
    
                      complete(StatusCodes.OK, s"${ior.count} bytes written")
    
                    }
                    case ior => complete(StatusCodes.EnhanceYourCalm, ior.getError.toString)
    
                    }
               Await.result(action, 300.seconds)
    
          }
       }
     }`
    

0 个答案:

没有答案