您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 电子商务 > 跨平台网络开发库ASIO开发平台安装简介
1跨平台网络开发库ASIO开发平台安装简介安装过程基于W4U4的虚拟机进行,Windows部分为参考网络资源整理而得。撰写时间20101020。1、概述在网络通讯这一块,已经有许多成熟的框架了,最典型的就是ACE,一个网络通讯设计模式的集大成者。但ACE太重型了,而且其起源于90年代,与标准库的集成不是太好,比如ACE就有自己的容器类。总而言之,ACE是一个庞然大物,威力无穷,但也显得比较笨重。1.1、Boost::Asio和ACE比较:ACE是一个很成熟的中间件产品,为自适应通讯环境,但它过于宏大,一堆的设计模式,架构是一层又一层,对初学者来说,有点困难。ASIO是基本Boost开发的异步IO库,封装了Socket,简化基于socket程序的开发。Boost::Asio是一个高性能的网络开发库,Windows下使用IOCP,Linux下使用epoll。与ACE不同的是,它并没有提供一个网络框架,而是采取组件的方式来提供应用接口。但是对于常见的情况,采用一个好用的框架还是能够简化开发过程,特别是asio的各个异步接口的用法都相当类似。Boost::Asio是利用当代C++的先进方法,跨平台,异步I/O模型的C++网络库。ACEASIO层次架构ACE底层是C风格的OS适配层,上一层基于C++的wrap类,再上一层是一些框架(Accpetor,Connector,Reactor等),最上一层是框架上服务ASIO与之类似,底层是OS的适配层,上一层一些模板类,再上一层模板类的参数化(TCP/UDP),再上一层是服务,它只有一种框架为io_service涉及范围包含了日志,IPC,线程,共享内存,配置服务等只涉及到Socket,提供简单的线程操作设计模式主要应用了Reactor,Proactor等主要应用了Proactor线程调度ACE的Reactor是单线程调度,Proactor支持多线程调度支持单线程与多线程调度事件分派处理主要是注册handler类,当事件分派时,调用其handler的虚挂勾函数。实现ACE_Handler/ACE_Svc_Handler/ACE_Event_handler等类的虚函数基于函数对象的hanlder事件分派。任何函数都可能成功hanlder,少了一堆虚表的维护,调度上优于ACE发布方式开源免费的,不依赖于第三方库,一般应用使用它时,以动态链接的方式发布动态库开源免费的,依赖Boost,应用使用时只要include头文件,不需动态库可移植性支持多种平台,可移植性不存在问题,但是据说socket编程在linux下有不少bugs支持多种平台,可移植性不存在问题开发难度对程序员要求比较高,要用好它,必须非常了解其框架。在其框架下开发,往往new出一个对象,不知在什么地方释放好要求程序员熟悉函数对象,函数指针,熟悉boost库中的boost::bind。内存管理控制方便综上所述,如果应用socket编程,使用ASIO开发比较好,开发效率比较高。ACE适合于理论研究,它本来就是源于Douglas的学术研究。21.2、asio简介:asio是一个跨平台的支持异步I/O的网络通讯socket库。异步I/O是一种高效的I/O模型,在Windows平台下这种机制的代表就是IOCP完成端口模型。事实上,asio在Windows平台上的实现就是对IOCP的封装。C++发展到现在,库的设计风格也越来越趋向于泛型,boost就是一个典型,而且boost社区跟C++标准委员会的密切关系,使得进入boost的程序库有更大的机会加入下一代的C++标准库。可以下载到最新版本的boost库,在本文档撰写之日最新版本是1.44,,在本文档撰写之日,最新版本是1.4.5。注意本文档中boost用的是1.43。如下所示,boostV1.43已经可以在多种OS上使用不同IDE进行编译,因此仅依赖其运行的程序自然也可以进行广泛移植:Boost'sadditionaltestcompilersinclude:Linux:Intel10.1,11.1on32bitRedHatEnterpriseLinux.Intel10.1,11.0,11.1on64bitRedHatEnterpriseLinux.GCC3.4.6,4.2.4,4.3.4,4.4.3onRedHatEnterpriseLinux.GCC4.3.4,4.4.3withC++0xextensionsonRedHatEnterpriseLinux.QLogicPathScale(TM)CompilerSuite:Version3.2onRedHatEnterpriseLinux.OSX:IntelC++Compiler10.1,11.0,11.1onLeopard.GCC4.0.1onIntelLeopard.Clangfromsubversion.Windows:VisualC++8,0,9,0on32-bitXP.VisualC++9.0usingSTLport5.2onXPandWindowsMobile5.0.VisualC++10.0onXP.VisualC++10.0on64-bitWindows7.Borland/CodegearC++5.9.3,6.1.3(2009),6.2.1(2010).IntelC++11.1,withaVisualC++9.0backend,onVista32-bit.GCC4.3.3onMingw.GCC4.4.3onMingw,withandwithoutC++0xextensions.GCC4.5onMingw.AIX:IBMXLC/C++EnterpriseEdition,V10.1.0.0,onAIXVersion5.3.0.40.FreeBSD:GCC4.2.1onFreeBSD7.2,64bit.GCC4.2.1onFreeBSD8.0,32bit.Solaris:SunC++5.10onSolaris5.10.2、boost安装过程2.1、解压并生成Jam:Boost使用的编译系统叫做Boost.Jam(Bjam),是一个基于FTJam的构造工具,而FTJam又基于PerforceJam。Jam是make的一个替代品,Jam的目标是让构造简单的东西更加容易,而让构造复杂的东西变得简单。3根据当前的OS,解压boost_asio_1_4_5.tar.gz或boost_asio_1_4_5.zip,以下不同OS或开发平台的相同步骤可能在一起描述,请注意分辨。[root@ws4u4Work]#tarzxvfboost_1_43_0.tar.gz可以看到目录结构大致为:boost_1_43_0\.................The“boostrootdirectory”根目录index.htm.........Acopyof所有的BOOST的头文件lib\.....................precompiledlibrarybinaries预编译库libs\............Tests,.cpps,docs,etc.,bylibrary其它文件index.html........Librarydocumentationstartshere导读algorithm\算法any\array\…morelibraries…status\.........................Boost-widetestsuitetools\...........Utilities,e.g.bjam,quickbook,bcpmore\..........................Policydocuments,etc.doc\...............AsubsetofallBoostlibrarydocs帮助文档[root@ws4u4Work]#cdboost_1_43_0/tools/jam/src[root@ws4u4src]#./build.sh######Using'gcc'toolset.###rm-rfbootstrapmkdirbootstrapgcc-obootstrap/jam0command.ccompile.cdebug.cexpand.cglob.chash.chdrmacro.cheaders.cjam.cjambase.cjamgram.clists.cmake.cmake1.cnewstr.coption.coutput.cparse.cpathunix.cpathvms.cregexp.crules.cscan.csearch.csubst.ctimestamp.cvariable.cmodules.cstrings.cfilesys.cbuiltins.cpwd.cclass.cnative.cmd5.cw32_getreg.cmodules/set.cmodules/path.cmodules/regex.cmodules/property-set.cmodules/sequence.cmodules/order.cexecunix.cfileunix.c./bootstrap/jam0-fbuild.jam--toolset=gcc--toolset-root=clean...found1target......updating1target......updated1target..../bootstrap/jam0-fbuild.jam--toolset=gcc--toolset-root=...found48targets......updating2targets...[MKDIR]bin.linuxx86[COMPILE]bin.linuxx86/bjam...updated2targets...Windows下就是运行build.bat来生成jam。当然,如果可以下载到当前平台已经编译好的Jam最方便了,例如解压boost-jam-3.1.18-1-ntx86.zip。2.2、设置环境变量当然要可以将编译出来的Jam文件拷贝到其它路径,然后再将该路径加入到系统路径,不一定非要将源代码路4径发布出来。开发平台设置方法LinuxPATH=%boost的绝对路径%/tools/jam/src/bin.ntx86;$PATHPATH=%boost的绝对路径%;$PATHVisialStudio6.0SETMSVC_ROOT=VC6的安装路径SETVISUALC=VC6的安装路径Example:SETMSVC_ROOT=c:\ProgramFiles\MicrosoftVisualStudio\VC98VisualStudio.netSETVC7_ROOT=vs.NET安装路径Example:SETVC7_ROOT=C:\ProgramFiles\MicrosoftVisualStudio.NET\VC7VisualStudio.net2003SETVC71_ROOT=vs.NET2003安装路径Example:setVC71_ROOT=C:\ProgramFiles\MicrosoftVisualStudio.NET2003\Vc7VisualStudio.net2005VisualStudio.net20082.3、编译boost库在引用了头文件之后,很多库函数都可以使用了。boost大部分库不需要编译,基本上只有下列库会需要编译:Boost.FilesystemBoost.IOStreamsBoost.ProgramOptionsBoost.Python(seetheBoost.P
本文标题:跨平台网络开发库ASIO开发平台安装简介
链接地址:https://www.777doc.com/doc-2044550 .html