delphiASIO_mmzmagic (本库是Boost ASIO for delphi的高效率稳定封装通讯框架)

来源:互联网 发布:信捷xc编程软件 编辑:程序博客网 时间:2024/05/29 12:52

做了8年多的DELPHI开发,还仍然在用D7,后续的DELPHI版本比如d2007,d2010还是非常很优秀的,有许多方便的功能和语法效率的改进。为啥不更换到新版本呢? 对于我来说究其原因还是因为通讯程序无法简单的做修改就移植到新版本上。 另外一个方面也是DELPHI本身没有较好的通讯库,INDY不稳定也不完善,不同版本也有些区别。开发起来四处抛异常的方式也让人很不爽。 研究了一些第三方通讯库,如ics系列dxsock系列,最后选择了dxsock,这样轻量级的库从稳定性还是易用性来说都比其它的要好用些。 不过这些库由于底层实现的方式都不能很好的支持大规模应用,由于后续支持的问题也不能支持DELPHI的新unicode版本。 C++由于有类似ACE、ASIO等等工业级的高性能稳定牛库的支持,c++的使用者们可以轻轻松松的用它们搞定很多难题而不用为并发连接数发愁。 为此经我研究决定封装底层基于IOCP(完成端口)实现的Boost::ASIO为DELPHI的底层通讯库,并且已经实现,delphi fans们大家有福啦 哈哈!

主要有以下几点好处:

1、支持大量并发( xp系统上测试可以支持到15000+的并发连接,付测试程序) 2、支持delphi的所有版本(d5以及以上版本都可以支持)

3、支持tcp服务端和客户端、异步通讯机制

4、在封装中自动高效处理粘包、异步通讯内存管理等较烦人的问题,也是容易导致不稳定的因素,提供外部使用的简明接口

5、最重要的是使用和开发都十分简单 :)

FAQ:

我能用它做什么? 答:所有用到tcp通讯的地方你都可以用它。
用它封装的服务端或者客户端可以与其它控件或者是其它程序进行通讯吗? 答:可以,底层是标准tcp协议,不会有任何问题。
它有什么示例程序吗? 答:有专门的性能测试程序,也有远程数据库对象ADO版本以及UNIDAC版本的实际封装。
使用它是否需要支付费用?能否提供源代码? 答:完全免费使用,并且提供所有源码,我会做好后续更新为delphi的发展做点力所能及的贡献。
如果我对它进行了改进怎么联系作者? 答:QQ 22900104,马敏钊,邮箱 22900104@qq.com,QQ讨论群 15637473 欢迎加入讨论。

发布时程序需要附带什么吗? 答:需要附带一个动态库“Svr_intf.dll”100k大小,由于是使用vs2005编译的boost库所以运行时机器上需要安装有微软的c++ vs2005运行库。

 

SVN下载地址:

    http://mmz-asio4delphi.googlecode.com/svn/trunk/ ­

 

相关知识简介

   BOOST:
     Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的发动机之一。 Boost库由C++标准委员会库工作组成员发起,其中有些内容有望成为下一代C++标准库内容。在C++社区中影响甚大,是不折不扣的“准”标准库。Boost由于其对跨平台的强调,对标准C++的强调,与编写平台无关。大部分boost库功能的使用只需包括相应头文件即可,少数(如正则表达式库,文件系统库等)需要链接库。


   ASIO:
     Boost.Asio是一个轻量级的异步网络库,它有简洁,小巧,高效,有良好的可扩展性,支持高并发的IO处理,入门简单等诸多优点。 Boost.Asio在设计上采用和Ace相似的Proactor设计模式,同时内置了对多线程的支持,针对不同的平台,采用了最优的socket模型,可以说能发挥机器的最大并发处理能力。


   IOCP(完成端口):
     Windows的设计目的是一个安全的、健壮的操作系统,能够运行各种各样的应用程序来为成千上万的用户服务。在处理大量用户并发请求时,如果采用一个用户一个线程的方式那将造成CPU在这成千上万的线程间进行切换,后果是不可想象的。而IOCP完成端口模型则完全不会如此处理,它的理论是并行的线程数量必须有一个上线-也就是说同时发出500个客户请求,不应该允许出现500个可运行的线程。目前来说,IOCP完成端口是Windows下性能最好的I/O模型,同时它也是最复杂的内核对象。它避免了大量用户并发时原有模型采用的方式,极大的提高了程序的并行处理能力。   虽然说IOCP完成端口应用的范围在于与IO相关的各种场合,但是就目前来看,IOCP完成端口主要用于网络通信方面。例如:大型MMO游戏(目前大型的MMO游戏都采用了IOCP完成端口)、大型IM(即时通讯、实时传讯)系统、 网吧管理系统、企业管理系统等等具有大量并发用户请求的场合。稳定、高效的IOCP完成端口通信模型几乎成为开发这类系统的基础。


   误区:
      Windows系统下的socket模型有多种,其中完成例程的效率也是相当高的,其它的也不差(相关模型知识这里不多做介绍,读者可以自己搜索或查阅有关资料)。但是不知道为什么,一提起IOCP就会有很多人质疑:IOCP真的有这么神话吗?
尽管质疑,依然有很多人还是在茫茫网络中苦苦寻找一个完整的IOCP源码,希望能够对了解IOCP起到事半功倍的作用,不过得到的大多也只是残缺不全的。什么是IOCP?IOCP的机制是什么?IOCP有怎样的性能?当一个人深入了解IOCP以后,才解开了它神话之谜:其实它没有什么神话。很多人之所以质疑IOCP,说出上面那句话的时候,其实是他正在神化IOCP,主要是因为对IOCP不了解,甚至不知道。所以,是谁神化了IOCP呢?是那些不了解IOCP但又想了解却没有进展的人。
IOCP主要针对数据吞吐量和连接并发量而设计。有些人使用IOCP,做的却是堵塞模式的事情:对每个连接自己建立一个发送队列,每次才投递一个发送请求给IOCP,等该请求已决后才又出列一个再投递给IOCP。任何一个服务器,能达到怎样的性能,对设计者的要求也是苛刻。根据服务器对性能要求,合理利用通讯模型,才是设计者的关键。如果在一个只有100个终端且每个终端每10秒才发送一个数据包的服务器系统里,用什么Socket模型都一样,甚至用Win98系统做都可以。
对于一个服务器而言,需要设计者对内存管理,对网络状况,对操作系统等等都要有深入了解,并具有深厚的技术功底。否则,还会产生更多神化IOCP的人。
服务器性能,系统支持是基础,设计者水平是关键。而这个水平条件,没有一个衡量的最终标准,它是永无止境的,会随着时间和经验的积累不断提高。 不过以上工作偶已经做好了 呵呵 就是上边所发布的Boost ASIO for Delphi。

原创粉丝点击