求:用aardio写一段1024MB大小的文件下载服务端、和文件下载客户端的演示代码服务端使用 wsock.tcp.asynHttpServer 库,客户端使用 inet.http 库
需求见代码中注释
[aardio] 纯文本查看 复制代码 //服务端
import console;
console.log("Start");
import wsock.tcp.asynHttpServer;
var srvHttp = ..wsock.tcp.asynHttpServer();
srvHttp.documentRoot = "C:\htdocs\"; //该目录中放置一个 大小约为 1GB 的 文件,名为 1024MB.bin
srvHttp.start(,666);
srvHttp.run(
function(response,request,session){ ;
if( ..io.exist(request.path) && (request.path !="/") ){
response.loadcode( request.path ); //求演示的 代码处
/**
上面这行,如果用浏览器下载 [url]http://127.0.0.1:666/1024MB.bin[/url] ,可以下载全
但 进程 内存就吃掉了 1个G,这显然不是我想要的。
如果使用我下方提供的 inet.http 客户端去下载,那这个文件下载不全,就下载几十兆到一百多兆不等
感觉是发起了第一次连接后就结束了。
想使用 文件流 的方式,但恕我直言…… 是我不会
所以,目的:
1、多个inet.http客户端可以同下载1024MB.bin (就像一个正常的httpd服务器,若目录里还有 768MB.bin、512MB.bin 多个文件,亦可同时并发下载)
2、可以下载完整的大文件(特别是用inet.http方式),且不要占那么大内存(文件流 是不是就不涉及自动释放内存)
**/
}
}
);
//srvHttp.stop();
win.wait(function(){},,900000);
console.pause(true);
[aardio] 纯文本查看 复制代码 //客户端
import console;
import inet.http;
..console.log("start_download");
//这段代码,下载正常的 apache 等httpd服务器上的大文件是正常的
//但是下载上方的 wsock.tcp.asynHttpServer 提供的服务端的大文件,只会下载一部分
var url = "http://127.0.0.1:666/1024MB.bin";
var savePath = "C:\1024.bin";
var whttp = ..inet.http();
whttp.beginRequest( url );
var ok,code,contentLength = whttp.send();
if( !ok || code > 399 ) {
whttp.close();
..console.log("failed..");
console.pause(true);
return;
}
if(..io.exist(savePath)) ..io.remove(savePath);
sleep(100);
var file = ..io.open(savePath, "w+b");
if(file) {
var buffer = ..raw.buffer( 1024 * 10 );
for( size in whttp.eachReadBuffer( buffer ) ){
file.writeBuffer(buffer, size);
}
file.close();
}
whttp.close();
console.pause(true);
|