从毕业设计开始,使用过的计算机语言,应该不下十种了,但还是Delphi最感情深厚。至今,我仍然认为Delphi是最好用的Win32开发工具。高效的设计、完全的面向对象支持、强大的VCL框架……
在做网络程序的时候,Delphi居然令我非常郁闷。
Indy伴随Delphi的版本:Delphi6的官方网络组件是ServerSocket和ClientSocket,到了Delphi7(可能仍然是目前使用者最多的Delphi版本),引入了Indy9,而ServerSocket和ClientSocket变成默认不安装。到了D2005,2006,2007,升级到Indy10。
首先,Indy9和Indy10不兼容,类的层次结构都变了,而命名空间、类名不变。这意味着什么呢?意味着装Indy10的Delphi不能编译Indy9的代码,同一个Delphi上无法同时装Indy9和Indy10。只能装一个Delphi7+Indy9,维护旧项目,再装一个Delphi2007+Indy10这样,勉强使用。
接下来,Indy9不支持完成端口,Indy10的SuperCore.dpk中是支持了,但是D2007附带的版本Bug非常多,最新的SnapShot却编译不过……理由是:IOCP部分的作者跳槽了,现在整个Indy项目只剩2个人在维护!!!请参见Indy的Yahoo!讨论组 可以加入他们的邮件列表
再接下来,Indy用的是Socket绑定一个线程的模式,在开发者的角度来说,可以少写好多代码。这种阻塞模式在网上也引起轩然大波,好多好多好多的口水战,见大富翁和CSDN吧。在Indy的官方帮助文档,以及著名的《Indy In Depth》当中,作者都乐观地告诉读者,很多连接都是短暂的,实际并发连接数一般不会很多,利用线程池便能够搞定。只要在TIdTcpServer上设一个属性这么简单。但是,最近的开发中,遇到一个问题:我们要设计一个服务器,要承受5000个并发长连接。重点不在5000,重点在并发长连接。也就是,每个客户端连上来,就赖着不走了,线程池也拿它束手无策。因为线程池的机制是,随时把断开的Socket所对应的线程放入池子,给别的Socket用。
这下彻底歇菜了:
Indy每线程绑定一Socket的机制不可行;
IOCP代码未完成,也不太可能有人去维护
再找第三方控件,ICS、DxSock,资料都非常稀缺,DxSock的官方网站 www.dxsock.com 还莫名其妙地变成了MP3的下载网站,不寒而栗。
难道Delphi(非.net)真的做不成大型服务器程序?不禁要再为命运坎坷的Delphi捏一把汗。祝Delphi,祝Indy走好。
参考:
Indy的Yahoo!讨论组
Indy官方网站
Indy最新SnapShot下载
在做网络程序的时候,Delphi居然令我非常郁闷。
Indy伴随Delphi的版本:Delphi6的官方网络组件是ServerSocket和ClientSocket,到了Delphi7(可能仍然是目前使用者最多的Delphi版本),引入了Indy9,而ServerSocket和ClientSocket变成默认不安装。到了D2005,2006,2007,升级到Indy10。
首先,Indy9和Indy10不兼容,类的层次结构都变了,而命名空间、类名不变。这意味着什么呢?意味着装Indy10的Delphi不能编译Indy9的代码,同一个Delphi上无法同时装Indy9和Indy10。只能装一个Delphi7+Indy9,维护旧项目,再装一个Delphi2007+Indy10这样,勉强使用。
接下来,Indy9不支持完成端口,Indy10的SuperCore.dpk中是支持了,但是D2007附带的版本Bug非常多,最新的SnapShot却编译不过……理由是:IOCP部分的作者跳槽了,现在整个Indy项目只剩2个人在维护!!!请参见Indy的Yahoo!讨论组 可以加入他们的邮件列表
再接下来,Indy用的是Socket绑定一个线程的模式,在开发者的角度来说,可以少写好多代码。这种阻塞模式在网上也引起轩然大波,好多好多好多的口水战,见大富翁和CSDN吧。在Indy的官方帮助文档,以及著名的《Indy In Depth》当中,作者都乐观地告诉读者,很多连接都是短暂的,实际并发连接数一般不会很多,利用线程池便能够搞定。只要在TIdTcpServer上设一个属性这么简单。但是,最近的开发中,遇到一个问题:我们要设计一个服务器,要承受5000个并发长连接。重点不在5000,重点在并发长连接。也就是,每个客户端连上来,就赖着不走了,线程池也拿它束手无策。因为线程池的机制是,随时把断开的Socket所对应的线程放入池子,给别的Socket用。
这下彻底歇菜了:
Indy每线程绑定一Socket的机制不可行;
IOCP代码未完成,也不太可能有人去维护
再找第三方控件,ICS、DxSock,资料都非常稀缺,DxSock的官方网站 www.dxsock.com 还莫名其妙地变成了MP3的下载网站,不寒而栗。
难道Delphi(非.net)真的做不成大型服务器程序?不禁要再为命运坎坷的Delphi捏一把汗。祝Delphi,祝Indy走好。
参考:
Indy的Yahoo!讨论组
Indy官方网站
Indy最新SnapShot下载
Powered by ScribeFire.


1 条评论:
实在不行,就再回原始时代,重拾winsock
发表评论