想问一下: 做文件系统,TIdTCPServer服务端代码怎样写,才可以占用最小资源? ( 积分: 100 )

  • 主题发起人 主题发起人 aKnightChen
  • 开始时间 开始时间
A

aKnightChen

Unregistered / Unconfirmed
GUEST, unregistred user!
我做个文件系统,多人同时传。
以前我用TCPServer,用法与TIdTCPServer差别很大。
服务端代码如下:(删除了一些无关的内容)

procedure TfrmMain.tcpSvrExecute(AThread: TIdPeerThread);
var
....
begin
with AThread.Connection do
begin
if ReadLN=TELL_YOU_MY_FILE_NAME_AND_SIZE/*这是个常量*/ then
begin
aFileStream:=TFileStream.Create('c:/xxxx.rar',fmCreate);
//开始向客户端索取文件....
//这种模式不太好,是服务器不管别人反映,盲目发收文件,可能会造成服务器很重的负担...
try //循环开始接受
repeat
WriteLn(IntToStr(aFileStream.Size));//发送当前传输的位置
//选择剩余大小和缓冲区大小小的一个作为传输的大小
ReadStream(aFileStream, Min(aFileSize-aFileStream.Size,RecvBufferSize) ); //接收流
aNowFilePosition:=AFileStream.Size;
Application.ProcessMessages;
until aFileStream.Size=aFileSize; //大小一致了表示结束
finally
FreeAndNil(aFileStream); //释放文件流
end;
end;
end;

end;

************************************************************************
即:我是在tcpSvrExecute中,收到开始接收文件命令,就直接一次性(一口气)循环收文件
以前的TCPServer是多次进入Execute中,多次接收文件,
我的这种方法也成功,也支持多人同时上传(已实测过)
但我不知哪种占用资源最小?
************************************************************************
 
我自已做实验结果,二者效率基本上是相同的。
INDY真好用!!!
我相信群众!!!
 
效率是相同,但稳定性怎么样?
稳定性我很难测试出来。
还是请哪位前辈指点一下!
 
没人跟贴,就不能结题?
哪位进来跟一下,就有分!
 
稳定性肯定不好了,随便发个包就可以搞死。
 
这样好么?ReadStream会自动分包吧,所以差不多
如果是我,我会愿意试一下请求模式,对方请求多少数据就发送多少给对方,这样更可控一些,但是效率应该会低一点
 
楼上的楼上能不能顺便说说网络交互一般怎么控制错误?
自己定义协议一般要包含哪些东西才可靠,而且方便断线处理
 
使用多线程,线程里传入参数AThread.Connection
让不同的线程去服务不同的连接
 
我感觉INDY真好用,至少我没有能力开发出这种好东西!
事件处理最好用!(onRead...)
结贴均分!
 
后退
顶部