Jboss @GZIP文件响应至少需要60秒

问题描述 投票:0回答:1

在Jboss6.10和RestEasy 2.2.1 GA上存在此问题,我找不到它不起作用的原因。我想gzip一个使用ClientProxy的Response文件,界面如下:

@POST
@Path("/download")
@GZIP
@Produces("application/octet-stream")
@Consumes("multipart/form-data")
Response getFile(@MultipartForm FileDownloadForm form);

实施:

    @POST
    @Path("/download")
    @Consumes("multipart/form-data")
    @GZIP
    @Produces("application/octet-stream")
    public Response getFile(@MultipartForm FileDownloadForm form) {
        LOG.info("GetFile : " + form.getFilePath() + form.getFileName());
        File file = new File(form.getFilePath() + form.getFileName());
        if(file.exists()) {
            GenericEntity<File> entity = new GenericEntity<File>(file) {};
            return Response.ok(entity).build();
        }
   }

通过客户端调用时,如果我删除@GZIP,则每个文件至少需要60秒的下载时间,响应未压缩,但会立即显示。 Wireshark跟踪显示,使用压缩时,服务器在数据传输后需要60秒才能发送最终的ACK。这会阻止我的客户60秒钟。我认为这是某处超时?没有错误或显示其他错误。

客户端调用:

ClientResponse<File> cR = (ClientResponse<File>) systemApi.getFile(form);
File file = cR.getEntity(new GenericType<File>() {});

由于服务器端只是返回响应:

 GenericEntity<File> entity = new GenericEntity<File>(file) {};
        return Response.ok(entity).build();

如果不知道如何强制关闭流。

当不使用压缩时,如何强制显示预期的行为?

也许有人可以帮忙吗?此行为是否有可能在此处记录为错误? -> https://jira.jboss.org/browse/RESTEASY-1650

我不确定这里是否会给休闲专家带来任何帮助!

jboss gzip resteasy multipart
1个回答
0
投票

我解决这个问题的时间是花费在这个问题上。我可以修复此返回的流输出。因此,似乎客户端然后负责关闭流,并且确实如此。

现在我面临下一个问题,如果现在有2个资源用@GZIP注释,一个资源返回json数据列表,而另一个则返回八位字节流。

如果痛苦不会那么大,那很有趣,有时只有json资源returne会被压缩,而如果我再次重新启动jboss,则其他资源返回的流根本不会被压缩,这两个资源都返回了压缩数据,下次重新启动后,仅将json压缩,但不进行流传输。太奇怪了!客户端不会改变,它只是重启jboss服务器。这使gzip功能对我来说毫无用处。

我还尝试将resteasy升级到2.3.7.Final,但是没有运气。

© www.soinside.com 2019 - 2024. All rights reserved.