tomcat6이 설치된 서버에 연결하는 간단한 Java 프로그램을 작성하고 있습니다. 문제는 서버에서 .mp4 파일에 액세스 할 때 다음 코드를 사용하면 1.mp4에 액세스해도 문제가되지 않지만 다른 파일 (2.mp4,3.mp4 등)에 액세스하면 문제가되지 않습니다. getResponseCode() 및 getContentLength()를 수행하는 데 약 2 분이 소요됩니다. 약간의 시간.getResponseCode, getContentLength를 호출 할 때 HttpURLConnection이 멈추는 경우
이public static void main(String[] args) throws IOException {
long time = System.currentTimeMillis();
String urlText = "http://some_http_address:some_port/1.mp4";
URL url = new URL(urlText);
HttpURLConnection huc = (HttpURLConnection)url.openConnection();
System.out.println("opConnection " + (double)(System.currentTimeMillis()-time)/1000 + "s ");
int code = huc.getResponseCode();
System.out.println("Code: " + code + " " + (double)(System.currentTimeMillis()-time)/1000 + "s ");
int size = huc.getContentLength();
System.out.println("Size: " + size + " " + (double)(System.currentTimeMillis()-time)/1000 + "s ");
InputStream in = (InputStream) huc.getContent();
System.out.println("Start to copy " + (double)(System.currentTimeMillis()-time)/1000 + "s ");
FileOutputStream fos = new FileOutputStream("/some/path/temp/temp.mp4");//destinationfile
byte[] buffer = new byte[1024];
int len1 = 0;
if(in != null){
while ((len1 = in.read(buffer)) > 0) {
fos.write(buffer,0, len1);
}
}
if(fos != null){
fos.close();
}
huc.disconnect();
System.out.println("Copy done " + (double)(System.currentTimeMillis()-time)/1000 + "s " + System.currentTimeMillis());
}
불운 파일의 일반적인 출력은 다음과 같습니다 :
opConnection 0.007s
Code: 200 279.565s
Size: 10246547 279.565s
Start to copy 279.57s
Copy done 297.258s 1392356076554
내가 데이터를 수집하려고, 그것은 약 279초입니다 ...보다 훨씬 더 다음과 같이 클라이언트에서의 코드는 우천 1백20초 ...
그리고 행운 1.mp4의 일반적인 출력은 다음과 같습니다
opConnection 0.004s
Code: 200 0.107s
Size: 24448266 0.107s
Start to copy 0.113s
Copy done 32.1s 1392355716952
모든 FIL e는 25MB보다 작으며/usr/share/tomcat6/webapps/ROOT에 있습니다. 서버는 기본 서블릿을 사용합니다. conf의/web.xml 파일의 일부는 다음과 같습니다
<servlet>
<servlet-name>default</servlet-name>
<servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class>
<init-param>
<param-name>debug</param-name>
<param-value>0</param-value>
</init-param>
<init-param>
<param-name>listings</param-name>
<param-value>true</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
getResponseCode 너무 느린 것이 이상한 것입니다. 위의 경우 getContentLength는 시간이 조금 걸렸지 만 getResponseCode가 없으면 실행하기 전에 크기를 가져 오는 데 오랜 시간이 걸립니다. 더 이상한 무엇입니까, 그것은 단지 1.mp4 이외의 파일에 발생합니다! 1.mp4에는 결코 일어나지 않습니다.
나는 이것에 대해 완전히 혼란 스럽다. 아무도 모른다.
--------------------------------------------- 업데이트 1 ---------------------------------------------
제안 된대로 복사가 완료된 후 huc.getResponseCode()
과 huc.getResponseCode()
을 이동하고 서버에서 Tomcat을 다시 시작한 후 huc.disconnect()
앞에 in.close()
을 추가하면 11933이 동결되기 전까지 huc.getInputStream()
, 15 초가되지만 응답 코드와 내용 길이는 1ms 만 남았습니다. HttpURLConnection huc
에 어떤 작업을하기 전에 2 분 이상이 필요하고 그 후에는 문제가없는 것으로 보입니다. 어떤 아이디어?
미리 감사드립니다.
--------------------------------------------- 업데이트 2 --------------------------------------------- 문제가 해결되었습니다. 내가 내 사무실에 왔을 때 멀리 갔다. 나는 아직도 그것을 일으킨 원인을 모른다. 서버가 내 사무실 1 층에 있기 때문에 네트워크 연결과 관련이있는 것 같아요. 내가 가지고 있다면 더 많은 업데이트를 게시 할 것입니다.
나는 여기 같은 문제를 만났다고 생각한다. 정말로 네트워크에 관한 것인가? 내 코드가 단일 노드에서 실행되고 있기 때문에 묻고 있습니다 ... 이상합니다. –