我正在编写一个内部Java小程序,通过HTTP上传文件。我开始使用内置的ClientHttpRequest,如果我想一个接一个地发帖,它工作得很好。当我试图让多个线程同时发布时,服务器端发生了一些异常,大文件的连接将挂起,同时仍在上传较小的文件。(大的似乎大约是10兆)经过大量的寻找,我无法找到一个我可以设置的超时来从这个错误中恢复,但最终找到了来自Apache的ClientHttp,它确实提供了一个设置超时的机制。它的问题是,虽然它声称能够在多线程程序中工作,但实际上它只执行一个接一个的请求。我发现了很多HttpClient的示例代码,它们说它可以在多线程上工作,并对我的代码进行了调整,以纳入这些更改,但它们都没有任何区别,我基本上仍然停留在一个线程上。
虽然发布并不需要多线程(HttpClient看起来确实比ClientHttpRequest快一点),但能获得额外的速度提升将是非常好的,因为有很多小文件可以同时发送。
这些文件是通过HTTP发送的,因为我们希望使用会话cookie对已经登录的用户使用相同的身份验证。
因此,我正在寻找一种方法来设置一个超时与ClientHttpRequest或HttpClient的代码,将实际发送多个请求在同一时间,如承诺。
我在线程之间共享相同的HttpClient实例,并使用多线程连接管理器(没有这个它甚至不能工作),就像文档所说的那样,它没有任何帮助。
任何帮助都将不胜感激,如果您需要任何澄清,请让我知道。
发布于 2008-10-09 21:16:06
查看您的代码示例可能会有所帮助。
也许问题出在applet环境上。您是在appletviewer、IDE还是在浏览器中测试它?浏览器通常设置为将到同一web服务器的连接数限制为2。您可以尝试添加main()并独立运行它,看看是否可以解决问题。
https://stackoverflow.com/questions/188592
复制相似问题