大型c/s结构框架,基于boost.asio,有源码及教程

youngwolf 2012-09-03 11:05:11
加精
st_asio_wrapper,目前最新稳定版本2.0
源码下载:http://download.csdn.net/detail/yang79tao/4543258
教程共三篇(第一篇):http://blog.csdn.net/yang79tao/article/details/7724514

主要功能:
虽然名字叫wrapper,但它不仅仅是包装boost.asio,而是实现了一个c/s结构框架;
最简单的开发只需要在客户端申明一个st_client对象,在服务端申明一个st_server对象,然后分别调用stat_service即可,当有数据需要发送时,调用send_msg发送数据,当有数据收到时,默认会输出到屏幕,二次开发者只需要重写on_msg_handle虚函数,即可自己处理消息,此时就已经实现了一个支持成千上万的c/s结构的服务端加客户端。

具体说来:
完全异步加多线程,线程数量可配置(宏),如果想要单线程,则配置一个线程即可;
数据透明传输,即自动打包解包,自动解决数据分包粘包乱序等问题;
支持自定义打包解包器,且可运行时修改;
服务端自动管理所有客户端状态;
服务端支持对象池;
服务端支持垃圾对象(已关闭的客户端对象)回收;
两端都带输入输出缓存;
跨平台,支持ipv6;

注:大量使用了c++0x特性,其中有个rang-based loop for新语法,在vc2010都编译不过(需要vc2012);但所有用到的特性都只是语法糖,相信大家很容易修改为原来的基本语法;
gcc则没有问题(我只在4.6.3及其以上版本中试过);
需要编译boost的system和thread库。建议使用1.50.0及其以上的boost版本,低版本的我没试过,我相信,只要编译能过,应该都能使用。
...全文
12014 101 打赏 收藏 转发到动态 举报
写回复
用AI写文章
101 条回复
切换为时间正序
请发表友善的回复…
发表回复
nbgsp1 2014-07-24
  • 打赏
  • 举报
回复
做的真不错,顶楼主!
crax20058 2014-07-20
  • 打赏
  • 举报
回复
别人辛苦写出来大家就别说风凉话,有本事自己也开源一个更好的出来,要不然就帮忙,不帮忙还说风凉话来展示自己有多厉害的人人品估计就有问题了。发现国内这样的人很多,你这么厉害干嘛呢
zqj50 2012-12-21
  • 打赏
  • 举报
回复
thx....
大招至胜 2012-12-20
  • 打赏
  • 举报
回复
好东西呀,最近我也在研究boost asio
ms2146 2012-12-16
  • 打赏
  • 举报
回复
不错,谢谢分享。
liangbina07 2012-12-12
  • 打赏
  • 举报
回复
好东西,顶一下了。有空看看,学习学习
wushuang443 2012-12-12
  • 打赏
  • 举报
回复
顶。学习了。谢谢搂主的分享。
水瓶座雨夕 2012-12-12
  • 打赏
  • 举报
回复
感谢分享 感谢分享
alexmayer 2012-12-11
  • 打赏
  • 举报
回复
顶一下开源精神!
metaza001 2012-11-16
  • 打赏
  • 举报
回复
非常支持楼主!!!!
youngwolf 2012-11-06
  • 打赏
  • 举报
回复
看文档显然是不支持。 但显然,在做东西的时候,不会去用多线程,因为那样反而麻烦,比如多线程send,如何让接收方正确接收并重组包,很麻烦。 我之前问这个问题,是想确认,我一个线程send,一个线程recv,作用于同个套接字上的安全性,这个问题没有得到非常肯定的结果,但我还是按照我的意思做了(我觉得同一套接字上,一个线程读一个线程写是显然的,谁都应该这样设计,否则吞吐量怎么上得去),也没有出现问题(做得很多压力测试)。 但是,如果一个线程send,一个线程close呢?
game_coder 2012-11-06
  • 打赏
  • 举报
回复
boost.asio 文档有明确说 线程和Boost.Asio 线程安全 通常在每个并发操作中使用独立的对象是安全的,但并发操作中使用同一个对象就不安全了.然而如io_service 等类型可以保证并发操作中使用同一个对象也是安全的. 但是队友tcp:socket也是这样的吗
game_coder 2012-11-06
  • 打赏
  • 举报
回复
最近也在封装asio 查看lz其他的帖子跟到这里来了 想请教lz个问题 Distinct objects: Safe. Shared objects: Unsafe. 关于这两句话 你现在搞明白了吗
youngwolf 2012-11-05
  • 打赏
  • 举报
回复
2.5版已经发布,支持vc2008,如果还需要在更低的vc中使用,可能还需要修改很少一些地方,但已经几乎没有难度了,因为vc2008及其以前的vc,都不支持c++0x。 位置在st_asio_wrapper/compatible_edition目录下面(与普通版本分开发布),接口有小修改(都是消息相关的,比如on_msg等),因为为了达到与move相当的效率,采用了智能指针。 下载地址: svn checkout http://st-asio-wrapper.googlecode.com/svn/trunk/ st-asio-wrapper-read-only 注:上面的是命令行,如果你在图形界面,则只需要输入http://st-asio-wrapper.googlecode.com/svn/trunk/这个地址即可。
m278878 2012-11-05
  • 打赏
  • 举报
回复
这个库看过, LZ考虑得很全面.
sxcong 2012-11-01
  • 打赏
  • 举报
回复
自libuv以来,其他网络库都不用了
dfasri 2012-10-31
  • 打赏
  • 举报
回复
WIN7系统, x86 或 x64 都可以, 哪个性能较高就哪个, 文件传送的不需要, 按业务包形式的测试那个即可
youngwolf 2012-10-29
  • 打赏
  • 举报
回复
什么平台?
如果要我编译,肯定是在特定的平台,你拿去用的时候,可能会少某些库,或者库版本不一致等诸多问题。
dfasri 2012-10-29
  • 打赏
  • 举报
回复
能在google里面上传上编译好的性能测试端么
yisiyou 2012-10-29
  • 打赏
  • 举报
回复
进来学习下
加载更多回复(65)

18,356

社区成员

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

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