編集:問題全体がネットワークの問題であることが判明しましたが、プロセスを最適化する方法についてアイデアがあれば、それでも感謝します。
私はサーブレットにかなり慣れていませんが、旅の途中で、パフォーマンスに関連する問題に遭遇しました。GoogleChromeブラウザのXHRオブジェクトを介してビデオファイルを送信しようとしています。ビデオファイルはBlobオブジェクトに保存されます。JavaScriptスクリプトでこの関数を使用します。
function upload(blob) {
var xhr = new XMLHttpRequest();
xhr.open('POST', '/Test/Odbieracz', true);
xhr.onload = function(e) { console.log("loaded"); };
xhr.onreadystatechange = function(){
console.log("state: " + xhr.readyState);
};
// Listen to the upload progress.
xhr.upload.onprogress = function(e) { console.log("uploading..."); };
xhr.setRequestHeader("Content-Type", "video/webm");
xhr.send(blob);
}
Blobがサーブレットに到達し、そこでこのコードを使用して処理するため、うまく機能します。
byte[] buffer = new byte[16 * 1024];
InputStream input = request.getInputStream();
OutputStream output = new FileOutputStream("costam0.webm");
int bytesRead;
while ((bytesRead = input.read(buffer)) != -1){
System.out.println(bytesRead);
output.write(buffer, 0, bytesRead);
}
output.close();
input.close();
ファイルも保存されます。
私が抱えている問題は、それが非常に遅いことです。私の計算によれば、約42kB / sを処理できます。これは、ビデオファイルを処理するWebサービスの場合は非常に遅いです。私は何時間もここに座って、なんとかしてスピードを上げる方法、または少なくともボトルネックを見つける方法を見つけようとしていますが、残念ながらそれがどこにあるのかわかりません。
私の疑いは、ブラウザがラグを引き起こしていることです。サーブレットで別のInputStreamを使用して、ローカルファイル(XHRを介してアップロードしようとしているものと同じもの)を使用しましたが、処理に問題はなく、所要時間も短くなりました。 1秒より。サーバーは私のローカルホストに配置されているので、ネットワークが私にそれほど遅れをとっているとは思いません。
誰かが以前にこの問題を抱えていたなら、私はどんなポインタにも感謝するでしょう。