我想将文件发送到至少100个客户端。一个文件为225MB。我做了一些测试,但我甚至无法达到80-90%的可用带宽来发送文件。
仅将文件发送给一个客户端时:8秒
2位客户:45-50秒(这是一个惊人的增长)
对于50个客户,它会持续增加多达30分钟的时间。
网络带宽为1Gbps。这意味着我可以达到超过100MB/s的速度。
这是我与此相关的代码部分:
totalSize = (int) file.length();
response.setContentType("application/octet-stream");
response.setContentLength(totalSize);
response.setHeader("Content-Disposition", "attachment; fileName=\"" + fileName + "."+extension+"\"");
is = new FileInputStream(file);
OutputStream os = nresponse.getOutputStream();
int byteRate = DmConstants.BYTE_RATE;
byte[] buff = new byte[DmConstants.BYTE_RATE];
int a = -1;
while((a = is.read(buff)) != -1)
{
// a is the number of bytes ACTUALLY read, so
// when we write, that's the number of bytes to write
os.write(buff,0,a);
}
os.flush();
os.close();
is.close();
BYTE_RATE
是1MB的缓冲区大小。如何提高性能?复制文件时,我可以达到约125MB/s的速度,看起来不错。
我猜多个读/写操作要花费很多时间(sBYTE_RATEyscall)。
有什么办法可以减少吗?
最佳答案
以下是可用于提高性能的技术列表:
关于java - 在将大文件发送到多个客户端的同时提高性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26526488/