编辑:整个问题原来是网络问题,但如果您看到任何关于如何优化流程的想法,我仍然会很感激。
我对 Servlet 还很陌生,在我的旅程中不久,我遇到了一个与性能有关的问题。我正在尝试通过 Google Chrome 浏览器中的 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 到达了我使用这段代码处理它的 Servlet:
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 服务来说非常慢。我已经坐在这里几个小时试图找到一种方法来加快速度,或者至少找到瓶颈,但不幸的是我不知道它可能在哪里。
我的怀疑是浏览器导致了延迟,我在我的 Servlet 中使用了不同的 InputStream 导致一个本地文件(我试图通过 XHR 上传的同一个文件)并且它根本没有问题处理它,花费更少超过一秒钟。服务器位于我的本地主机上,所以我认为网络一点也不落后。
如果有人以前遇到过这个问题,我将不胜感激任何指示。