我正在运行一个简单的服务器应用程序来接收来自精细上传器Web客户端的上传。它基于精细上传器Java示例,并且在Tomcat6中运行,Apache坐在它前面并使用ProxyPass来路由请求。我遇到一个偶然的问题,上传达到100%,但最终失败。在服务器日志中以及在客户端上,我可以看到Apache在代理上超时时出现502错误。
自己尝试看到之后,我意识到问题出现在非常大的文件中。 Java服务器应用程序花了超过30秒的时间将块重新组装成一个文件,因此Apache会终止连接并停止等待。我已经将Apache Timeout增加到300秒,这应该可以在很大程度上解决问题,但潜力仍然存在。
有关处理此问题的其他方法的任何想法,以便在应用程序在服务器上组装块时,Apache和Tomcat之间的连接不会被终止?我目前正在使用2 MB的块,我想也许我应该使用更大的块大小。也许用较少的块来组装服务器代码可以更快地完成。我可以测试一下,但除非加速是戏剧性的,否则似乎问题的可能性仍然存在,并且只是等待足够大的上传来触发它们。
答案 0 :(得分:2)
看起来你有两个选择:
使用后一种方法,您将无法让Fine Uploader知道块组合操作是否失败,但也许您可以在响应之前执行一些快速的健全性检查,例如确定是否所有块都可以访问。
没有什么好的上传者可以在这里做,问题是服务器端。 Fine Uploader发送请求后,其作业将完成,直到您的服务器响应。
正如您所提到的,增加块大小或进行其他更改以加速块组合操作以减少超时的可能性(如果不希望上面的#1或#2)可能是合理的。