如何优化一个 Web 服务器的文件传输能力?我有4种方案
如何优化一个 Web 服务器的文件传输能力?
根据HTTP请求,获取URL,笔者在这里指定为filepath
方案一:
1、根据filepath打开文件;
2、获取文件大小filesize,申请filesize大小的内存;
3、关闭文件;
4、每次send 4KB大小的数据到请求方,直到全部发送;
5、释放申请的内存。
测试现象:1个700MB的文件被同时请求2次,第2次即申请内存失败
测试结果:方案不可行
方案二:
1、根据filepath打开文件;
2、char buff[4*1024]={0},每次读4KB数据,发送4KB数据,直到全部读取;
3、关闭文件;
测试现象:对1000个请求,CPU使用率50%
测试结果:效率过低
方案三:
1、将所有的文件事先CreateFile,CreateFileMapping,MapViewOfFile;
2、建立对应关系 filepath <-> address of MapViewOfFile;
3、根据filepath获取对应的address;
4、char *p=address,char buff[4*1024]={0},每次读4KB数据,发送4KB数据,直到全部读取;
5、无限循环
6、UnmapViewOfFile,CloseHandle,CloseHandle,程序结束
测试现象:对1000个请求,CPU使用率10%
测试结果:比较满意
方案四:
1、根据filepath打开文件;
2、使用Microsoft扩展函数TransmitFile函数,发送数据;
3、关闭文件
测试现象:对1000个请求,CPU使用率8%
测试结果:比较满意
上面是我测试的结果,大家看看,评评,哪种方案最好,
有没有更好的方案?