关于boost asio一个性能改进问题

hurryboylqs 2014-07-03 07:02:59

//投递接受异步请求
void CAsioEngine::PostAccept()
{
boost::shared_ptr<boost::asio::ip::tcp::socket> pSock(new boost::asio::ip::tcp::socket(m_ioService));//这里每次都要new一个socket
m_acceptor->async_accept(*pSock, boost::bind(&CAsioEngine::HandleConnectEstablished, this, pSock, _1));
}


上面的函数是boost asio投递连接接受的请求,做为服务端这个pSocket在连接断开后能不能重用呢?比如像IOCP那种DisConnectEx
不知道如何做到,高分请教,或者有关于提高性能的也可以讨论
...全文
520 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
hurryboylqs 2014-07-10
  • 打赏
  • 举报
回复
引用 1 楼 oyljerry 的回复:
连接关闭后,会释放new的这个对象把
是的 正常就是这个样子,但是我希望不要释放 而是能重用
oyljerry 2014-07-10
  • 打赏
  • 举报
回复
连接关闭后,会释放new的这个对象把
delphiASIO_mmzmagic本库是Boost ASIO for delphi的高效率稳定封装 做了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运行库。
1、系统和网络编程库:ACE 除了ACE之外,还有很多系统和网络编程方面的程序库。比如在线程库方面,还有ZThread、boost::thread,如果放大到C/C++领域,还有APR,还有CII。在文件和目录操作方面,boost也有相应的组件,而在网络编程方面有socket++,还有boost::asio,未来的C ++0X中几乎肯定有一个网络编程和一个线程库。然而目前看来,ACE仍然是进行系统和高性能网络编程的首选,其地位在一段时间内不会被撼动。它不但是一个实用的程序库、框架集,还是一个典范的设计模式应用范例,非常值得学习。 2、GUI库:Qt 传统上Qt被认为是可移植的GUI库,但实际上Qt现在已经是一个比较完整的可移植应用程序框架了,其中包含了大量的工具,比如正则表达式、Web和 Socket类、2D和3D图形、XML解析、SQL类等,甚至还包括了一个完整的容器类库,不过其王牌还是GUI。在目前的跨平台GUI框架中,Qt成熟度最高,已经被一些大公司应用在关键产品中。由于Trolltech对Qt采用的dual license模式,该产品既可以从开源社区获得支持,又能够赚取足够的商业利润,因此其前景也令人比较有信心。 Qt的主要技术特色是其元对象模型。Qt实际上使用的并不是标准的C++,而是标准C++的一个扩展。它通过元对象模型扩展,实现了著名的signal/slot机制,而这一机制也成为Qt的最大特色和优势。 与Qt类似的可移植GUI框架还有wxWidget、FOX等。 3、分布式对象中间件:ICE ICE是分布式对象中间件领域里的后起之秀,可以大致地将其视为“改进版”的CORBA。目前应用在一些大型项目当中,其中包括波音公司主持的下一代陆军作战系统。 ICE的一个特别价值是其代码的范例意义。由于ICE的出现较晚,开发者比较系统地应用了新的C++编程风格,所以成为了研读C++代码的良好目标。 4、正则表达式:boost::regex 正则表达式是编程工作中最强有力的工具之一。C++的正则表达式支持一直以来是一个软肋。大约在2001年左右,boost中出现了regex库,初步解决了这个问题。但是最初的regex无论在效率上还是可靠性方面都有一些问题,后来经过一次大规模的翻修之后,达到了比较完善的程度。 其他可以选择的替代品还有C语言的pcre库,Qt中的QRegExp类等。 5、矩阵计算:MTL 自1995年以来,C++在科学计算领域当中取得了巨大的突破。这主要归功于template技术的高级应用,使得C++在科学计算的性能方面取得了巨大的进步,一大批优秀的C++科学计算库涌现出来。比如Blitz++、POOMA、MTL、Boost::uBLAS。而这其中,MTL就功能丰富程度、性能、开发支持和成熟程度来讲,是比较突出的一个,因此可以优先考虑。值得一提的是,2002年,MTL与后来被Intel收购的KAI C++配合,曾经在性能评测中击败了FORTRAN。 6、XML、TinyXml C++的XML相关库不少,但是大部分其实都是C库,使用起来自然不那么轻便。其中基于DOM的有TinyXml,基于SAX的当然是Xerces。前者小巧快捷,便于使用,适合做数据交换。后者则是全功能的XML解析器。 7、内存管理:boost::smart_ptr,Hans-Boehm GC C/C++的内存管理是一个永恒的话题。一般来说,C++的开发者倾向于自己管理内存。然而,出乎很多C++开发者意料的是,近期C++的一些领袖人物已经公开宣称,如果不配备自动内存管理机制,用C++编写安全可靠的大型程序是非常困难的。而Bjarne Stroustrup也曾对中国开发者建议,如果没有特别的理由,应该在大型项目中使用自动内存管理工具。因此,今天的C++开发者应当积极地学习和应用自动内存管理设施。 说到自动内存管理,比较轻量级的做法是boost::smart_ptr,而激进的做法是引入完整的GC机制。目前开源而又比较可靠的GC中,Hans- Boehm GC无疑是最受信赖的。作为一个保守的GC,Hans-Boehm GC在性能和功能方面都算是卓越。特别是,使用这个**,你仍然可以*elete、free来自己管理内存,对于我们编程习惯的冲击比较小。 8、配置管理:Lua 随着软件系统越来越复杂,对软件的可配置型提出了越来越高的要求。传统上只要通过命令行参数来配置的系统,现在可能需要越来越多的方式和机制。目前越来越受欢迎、并且得到越来越多证实的做法,是将Lua嵌入到C/C++程序中,而用Lua程序作为配置脚本。这种做法的优势是,Lua语言强大灵活,可以适应复杂的配置要求。同时,Lua便于嵌入C/C++程序,而且编译执行速度非常快,可以说是目前解决C/C++程序配置管理问题一个出色方案。 9、密码及安全:OpenSSL 安全是今天进行C/C++编程无法回避和必须重视的问题。然而编写安全的应用程序,特别是跟网络相关的C/C++应用程序,是一件十分困难的事情。可以说,整个业界目前在这个进程上仍然处于“初级阶段”。特别是涉及到大量的安全、密码学相关的算法、规范,如果让开发者自己摸索,其工作量和难度达到了不现实的程度。因此必须借助可靠的相关程序库才有可能提高程序的安全性。在这方面,OpenSSL是目前最好的选择,其内容之全面可靠,已经成为业界标杆。然而,由于安全编程固有的复杂性,即使使用penSSL,开发工作仍然是非常繁琐的。因此我们也希望能够尽快看到更简单、更易用的C/C++安全程序库。
《Linux多线程服务端编程:使用muduo C++网络库》主要讲述采用现代C++在x86-64 Linux上编写多线程TCP网络服务程序的主流常规技术,重点讲解一种适应性较强的多线程服务器的编程模型,即one loop per thread。 目 录 第1部分C++ 多线程系统编程 第1章线程安全的对象生命期管理3 1.1当析构函数遇到多线程. . . . . . . . . . . . . . . . .. . . . . . . . . . . 3 1.1.1线程安全的定义. . . . . . . . . . . . . . . . .. . . . . . . . . . . 4 1.1.2MutexLock 与MutexLockGuard. . . . . . . . . . . . . . . . . . . . 4 1.1.3一个线程安全的Counter 示例.. . . . . . . . . . . . . . . . . . . 4 1.2对象的创建很简单. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 5 1.3销毁太难. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 7 1.3.1mutex 不是办法. . . . . . . . . . . . . . . . . . . .. . . . . . . . 7 1.3.2作为数据成员的mutex 不能保护析构.. . . . . . . . . . . . . . 8 1.4线程安全的Observer 有多难.. . . . . . . . . . . . . . . . . . . . . . . . 8 1.5原始指针有何不妥. . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 11 1.6神器shared_ptr/weak_ptr . . . . . . . . . .. . . . . . . . . . . . . . . . 13 1.7插曲:系统地避免各种指针错误. . . . . . . . . . . . . . . . .. . . . . . 14 1.8应用到Observer 上.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16 1.9再论shared_ptr 的线程安全.. . . . . . . . . . . . . . . . . . . . . . . . 17 1.10shared_ptr 技术与陷阱. . . .. . . . . . . . . . . . . . . . . . . . . . . . 19 1.11对象池. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . . 21 1.11.1enable_shared_from_this . . . . . . . . . . . . . . . . . . . . . . 23 1.11.2弱回调. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . 24 1.12替代方案. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . . 26 1.13心得与小结. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . . 26 1.14Observer 之谬. . . .. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28 第2章线程同步精要 2.1互斥器(mutex). . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32 2.1.1只使用非递归的mutex . . . . . . . . . . . . . .. . . . . . . . . . 33 2.1.2死锁. . . . . . . . . . . . . . . . . . . .. . . . . . . . . . . . . . 35 2.2条件变量(condition variable). . . . . . . . . .

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧