indy9 源码改造成完成端口问题 ( 积分: 200 )

  • 主题发起人 主题发起人 小狗熊
  • 开始时间 开始时间

小狗熊

Unregistered / Unconfirmed
GUEST, unregistred user!
近日里打算对indy9源码改造下,想让他成为iocp模式
或者求一保持原indy9接口的其他IOCP控件
请高手指点,如果能提供源码更好
如果不方便提供可以人民币求购
 
这个好像难度很大,或是不可能实现,建议还是放弃吧,论坛中的现成IOCP模式代码,改改就可以用了,还不错
 
问题是这样的,源码以前就是用的indy9 idtcpserver控件,工程还是不小的,如果换你说的那种,要调试的东西太多了,整个框架都换了
所以想找个简单的修改的方法,把原工程的idtcpserver源码改动下,让他能支持更多的连接数,而不被2028限制住
 
再怎么修改,tcp的连接方式连接数总是有限的。
要想支持的终端多话,建议采用无连接的方式。
 
IocpIndy

IocpIndy资料索取:qq:69700122 IocpIndy升级解决方案;

完成端口模型可同时处理5000-35000的客户端;实际应用中习惯操作烦琐,移植困难;IocpIndy

可直接替换Indy的完成端口DELPHI控件;完成端口模型;自建接收缓冲区和线程池;稳定的替换

Indy控件构件的程序;活动任务线程;可直接使用INDY的任务阻塞模式;

示例:IocpIndy

Procedure TTcpForm.IdTCPServer1Execute(AThread:TCWorkerThread);
Var
RecCMD:String;
Begin
Try
RecCMD:=AThread.Connection.Readln(EOL);//阻塞 但线程执行完毕会释放 无2028线程
Except
AThread.Connection.Disconnect;
Exit;
End;
SuperUserProc(AThread,RecCMD);
End;

示例:Indy

Procedure TTcpForm.IdTCPServer1Execute(AThread:TIdPeerThread);
Var
RecCMD:String;
Begin
Try
RecCMD:=AThread.Connection.Readln(EOL);//阻塞 线程执行完毕不会释放 导致2028线程
Except
AThread.Connection.Disconnect;
Exit;
End;
SuperUserProc(AThread,RecCMD);
End;

在客户端保存上INDY可直接保存线程;IocpIndy需要保存[AThread.Connection];

IocpIndy的TCWorkerThread由线程池分派的任务线程;除非一直阻塞;否则完成任务后会销毁;

如果长期阻塞TCWorkerThread线程将失去Iocp的优势;

[red]大家看下这个,他的源码是要卖的天价,所以我想自己研究下[/red]
 
RecCMD:=AThread.Connection.Readln(EOL);//阻塞 但线程执行完毕会释放 无2028线程
要看你的系统是否需要连接,它这里不是释放了吗?
我用winsock写的tcp完成端口不释放的还是很有限制的。
 
参考一下设计模式中的适配器模式(Adapter)
保持现有接口不变的情况下替换Indy控件
 
to muhx:
请问可以详细指导下吗,呵呵,我水平太低
 
楼主不是有代码了?怎么还不行吗?
那IOCPIndy的代码能不能传到DFW的我的笔记上,给偶学习学习
 
http://www.indyproject.org/docsite/html/WhatsNewIndy10.html
Indy10官方手册说支持IOCP:
Support for the Windows Fiber and IOCP APIs


Indy 10 provides experimental support for the Fiber and I/O Completion Ports API in the Windows platforms. This support is designed to aid in creating more scalable servers where thousands of simultaneous client connections are required. For small- and medium-sized projects, the traditional thread-based servers are still available.

Fiber and IOCP APIs are supported only for the Windows 2000, 2003, and XP operating systems using Delphi version 7. Windows 95, 98, and ME are not supported. Delphi compilers prior to version 7 are also unsupported due to critical changes in the VCL since those releases.
 
indy bug如牛毛,包括上面说那个完成端口的SuperCore
 
听说tcpserver也不错,不知道谁有例子,自带的聊天室demo不好
 
>>来自:白河愁, 时间:2007-4-30 13:41:16, ID:3709348
>>indy bug如牛毛,包括上面说那个完成端口的SuperCore

嗯,我也阅读了SuperCore的代码,后来在网上也找了找。Indy项目是非盈利项目,所以大多数开发者都是在兼职开发。貌似SuperCore的开发人员一直都为完成SuperCore,实在是郁闷。
 
要修改DELPHI里的控件源代码,还不如继承再写控件呢。
 
后退
顶部