2010-12-30 3 views
9

Pracuję w aplikacji desktopowej przy użyciu java. W mojej aplikacji muszę wykonać test prędkości, który pokaże prędkość pobierania i pobierania pliku.Testowanie wysyłania i pobierania plików za pomocą FTP

Do przesłania testu Przesyłam mały plik testowy na serwer FTP i na podstawie podanego czasu obliczam prędkość wysyłania plików. podobnie pobieram plik testowy z serwera i obliczam prędkość pobierania.

Ale wynik, który otrzymuję, nie pasuje do rzeczywistego pobierania i pobierania pliku FTP. Wygląda na to, że nawiązanie połączenia z serwerem FTP zwiększa czas, dlatego wynikowa prędkość, którą obliczam, jest mniejsza.

oto kod przesyłanie plików używam:

 public int getTransferRate(File filename) 
    {   
     int trRate = 0; 

     try { 

     OutputStream fout = null; 
     InputStream bin = null; 

     connect(ftpUser,ftpPass,ftpServer); 


     ftp.setFileType(FTPSClient.BINARY_FILE_TYPE); 
     ftp.enterLocalPassiveMode(); 
     fout = ftp.storeFileStream("testuploadfile"); 

     bin = new FileInputStream(filename); 
     byte[] b = new byte[8192]; 
     int bytesRead = 0; 

     long startTime = System.currentTimeMillis(); 
     long endTime = 0; 
     while ((bytesRead = bin.read(b)) != -1) { 
      fout.write(b, 0, bytesRead); 
      bytesUploadedSet += bytesRead; 
     } 
     endTime = System.currentTimeMillis(); 
     trRate = (int) ((float) bytesUploadedSet/(endTime - startTime)); 

    } catch (IOException ex) { 
     Logger.getLogger(FTPFileStorageService.class.getName()).log(Level.SEVERE, null, ex); 
    } 
    return trRate; 
} 

mógłbyś zasugerować dowolny link lub jakiś sposób na najbliższym wysyłania i pobierania prędkość.

Dzięki wszystkim cennym sugestiom.

+0

można umieścić (minimalny) przykładowy kod do wykazania, w jaki sposób są wykonania przelewu i obliczania prędkości? – SimonJ

Odpowiedz

1

Po pierwsze, filezilla prawdopodobnie używa natywnego kodu, który będzie szybszy niż to, z którego korzystasz.

Aby przetestować, nawiąż połączenie i spróbuj przesłać wiele plików, około 20 lub tak, co powinno dać dobry efekt. W przeciwnym razie, zaloguj się również do pliku testowego oddzielonego przecinkami lub czegoś, co można później zaimportować do programu Excel i przeanalizować. Możesz użyć czegoś takiego jak JMeter, jeśli chcesz wykonać test wydajności twardego dysku.

W każdym rodzaju testu wydajności o dużej wielkości próbki (wiele wyników próbek) daje najdokładniejsze wyniki.

http://jmeter.apache.org/

1

Nie można uruchomić licznika po nawiązaniu połączenia?

Jeśli nie dla szybkiego rozwiązania częściowego, zwiększ rozmiar pliku testowego, tym większy, tym mniej znaczący będzie narzut związany z połączeniem.

Jeśli chcesz być bardziej precyzyjne, wtedy będę odroczyć do kogoś z większym doświadczeniem hava ...

+0

Dzięki za odpowiadanie Próbuję 2MB pliku do testu wysyłania i uruchamiania timera po ustanowieniu połączenia, ale kiedy używam Filezilla do przesyłania plików, pokazuje on ok 100 kbps ale w teście dostaję max 65 kbps. co jeszcze może być powodem, dla nieosiągnięcia dokładnego wyniku? – Toman

0

można użyć prostszej protokół HTTP, takich jak?

Konfigurowanie transferu FTP może być kłopotliwe: należy ustanowić oddzielne połączenia kontrolne i połączenia danych, a oba punkty końcowe muszą uzgodnić, czy używać trybu pasywnego, czy aktywnego, aby ominąć zapory i NAT. Proces ten może obejmować tylko próbowanie jednej z opcji (na przykład aktywnej) i oczekiwanie na sukces lub przekroczenie limitu czasu, co może być przyczyną zakłóceń w pomiarach.

+0

Dzięki za odpowiedź. Ponieważ moja aplikacja używa FTP do przesyłania plików, dlatego wymagane jest obliczenie prędkości FTP. A do korzystania z HTTP wymaga pewnych uprawnień od administratora, aby zezwolić na http, jeśli firewall jest włączony. – Toman