自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(56)
  • 资源 (22)
  • 收藏
  • 关注

原创 ascs 简明开发教程(二十五):关于standalone asio 停更

介绍ascs依赖从standalone asio改为Boost.Asio之后的变化。

2023-02-28 20:52:59 463 2

原创 ascs 简明开发教程(二十四):单线程模式

单线程版本,需要你显示地以sp.start_service(0);单线程模式指的并不是只能有一个service线程,而是一个io_context一个service线程,对于每个io_context来说,就是单线程模式,asio对单线程模式有优化,比如事件队列的增删操作省去加锁等。注意,如上所说,单线程版本的确可按普通版本运行,只是构造service_pump的时候,默认所有参数即可,然后以大于0启动,但这样反而不如普通版本效率高(只是理论上的,单线程模式下会多一些if判断)。单线程模式其实就是基于。

2023-02-04 17:59:59 602

原创 ascs 简明开发教程(二十三):回调注册

本文介绍了不通过继承重写虚函数的方式来使用 ascs 库,而是通过注册事件回调函数来实现。

2023-01-02 16:38:43 305

原创 ascs 简明开发教程(二十二):可靠的UDP传输

QQ交流群:198941541可靠UDP基于KCP(https://github.com/skywind3000/kcp),用户需要熟悉KCP的窗口大小,重传模式,流控等,ascs还是原来的的原则,不封装KCP,用户通过ikcpcb* get_kcpcb() 得到ikcpcb做任意想要的配置,当然应该在数据收发之前(构造函数里面和reset虚函数里面,后者会在socket被重用之后马上被调用)。reliable_socket_base继承自原来的 UDP socket_base,所以如果你不创建KC

2021-09-04 16:54:17 348

原创 ascs 简明开发教程(二十一):service_pump 的多io_context支持

QQ交流群:198941541多io_context比单io_context来说,基本上在所有情况下都有性能优势(当然也你还是应该在自己的实现生产环境下面做一些调优,以找到最优的io_context数量加service线程数量),多io_context有一些自身特定的要求,罗列如下:一:需要定义ASCS_AVOID_AUTO_STOP_SERVICE宏(但库没办法做静态代码检测,所以你不定义也编译得过),这是因为,拿服务端举例,一个servcer_base只包涵一个acceptor,一个accept

2021-09-04 15:35:26 547

原创 ascs 简明开发教程(二十):消息发送完成通知与消息派发(接收)的顺序性

QQ交流群:198941541消息发送完成通知即on_msg_send和on_all_msg_send,消息派发指的是on_msg和on_msg_handle(包括批量异步派发和单条异步派发),先抛出结论,不要对这两类回调的先后顺序做任何假设,即便是on_msg_send与on_msg也一样(它们都属于收发线程,还记得在上一篇教程里面说的每个socket里面都有两个线程吗?)。我们说一个很特殊的案例,a发送一个消息给b,b再原样返回,a接收这个返回,然后ab都停止数据收发,这个案例看起来最像是有先后

2021-01-24 14:58:51 430

原创 ascs demo解释(六):其余demo

QQ交流群:198941541debug_assistant是我放到腾讯云(132.232.4.104)上给大家测试用的,总共监听了3个端口:tcp(9527), tcp(9528) 和 udp(9527),第一个采用默认的 length + body 协议,第二个采用流式无协议,所有的服务都是把消息原样返回,所以这个demo没什么好说的,唯一一个之前没说过的演示是实现自己的object_pool:template<typename Object>class timed_object

2021-01-21 15:48:27 221

原创 ascs 简明开发教程(十九):到底什么情况下才能使用无锁队列缓存

QQ交流群:198941541无锁队列即non_lock_queue,只要你用的container(默认是list,非线程安全)是线程安全的,就一定可以用无锁队列。我们重点要讲的是,如果container非线程安全,哪种类型的业务可以用无锁队列(file_server就用了无锁发送缓存队列)。先说说socket里面到底有多少线程,service线程可以开很多,但是由于用的asio的strand,它可以保证不并发,所以我们仍然把这种情况看成单线程(虽然线程id不一样),基于这样的前提,每一个socke

2021-01-19 11:23:14 374 1

原创 ascs demo解释(五):file_client + file_server

一个类似ftp的文件传输工具的实现介绍,当然是基于ascs。

2021-01-18 13:34:51 312

原创 ascs demo解释(四):pingpong_client + pingpong_server, socket_management

QQ交流群:198941541这一组合用于乒乓测试,其实concurrent_client + concurrent_server也是乒乓测试,只是测试方向不一样而已,其实这一组乒乓测试更像是echo_client + echo_server的测试,大家不用纠结名字。既然是乒乓测试,那必须是收到消息之后再转发(或者发送下一个消息),从结果可以明显的看出来,乒乓测试的效率出奇的错差,原因也一目了然,它完全没有用上ascs的收发缓存,也没有用上SOCKET的收发缓存。所以你得祈求你的业务不是乒乓测试这种

2021-01-17 20:34:12 343

原创 ascs demo解释(三):concurrent_client + concurrent_server

QQ交流群:198941541这个组合用于测试并发性,在concurrent_client里面指定连接数量和最大的可接受延迟,然后开始测试,它会定时检测服务端的响应时间,如果超过最大延迟就断开这条连接,所以最后稳定下来之后的连接数量,就是在满足这个最大延迟情况下,服务端支持的最大连接数,测试永不停止,直到输入quit退出concurrent_client。这个测试中你会发现,当业务逻辑(消息原样返回)非常简单时,用1个service线程也许能达到最高的吞吐量,这说明在极端情况下,线程的切换也会影响总

2021-01-17 11:33:07 267

原创 ascs demo解释(二):echo_client + echo_server

QQ交流群:198941541echo_client + echo_server用于性能测试,同时echo_server还多开了两个端口用于服务demo client,这个在前一篇教程里面已经说过了。先说说echo_client,它演示了 关闭对象生命同期跟踪(宏ASCS_DELAY_CLOSE),同步批量派发消息(宏ASCS_SYNC_DISPATCH,此时你在on_msg里面处理消息),异步批量派发消息(宏ASCS_DISPATCH_BATCH_MSG,此时和单条派发消息一样,也是在on_msg

2021-01-16 15:59:03 517

原创 ascs demo解释(一):client

QQ交流群:198941541按理说每个demo都应该像是一个UT test,仅演示一个或者很少许的功能,但由于个人偷懒的原因,想演示得更多,又不想新增加demo工程的个数,造成demo变得巨复杂,感觉使用ascs库比直接使用asio还麻烦,为此专门出几期教程介绍这些demo,很多新接触ascs的朋友,喜欢从demo上修改得到自己想要的功能,本人并不推荐这么做,而是应该把ascs 简明开发教程 先读完,再从前面四篇教程里面生成的代码上去添加自己的业务逻辑,这样不容易把自己搞晕。这个demo演示了同.

2021-01-15 17:34:53 450

原创 ascs 简明开发教程(十八):定时器

QQ交流群:198941541前面讲过,ascs支持定时器(由asio实现),socket和object_pool都继承自timer对象,所以你几乎可以在任意地方使用定时器。下面罗列一下使用定时器需要注意的地方以及定制化定时器等:如果定义宏ASCS_USE_STEADY_TIMER,将使用asio::steady_timer实现定时器,否则用asio::system_timer;对于st_asio_wrapper库,宏ST_ASIO_USE_STEADY_TIMER表示使用boost::asio::

2020-10-13 11:11:20 644

原创 ascs 简明开发教程(十七):再谈对象生命周期管理

QQ交流群:198941541这次我们再进行一次深入的对象生命周期管理的探讨(这里的对象,其实就是socket),对象生命周期管理是object_pool做的,所以single_client是没有生命周期管理的,那是开发者的事。object_pool用shared_ptr管理对象,那第一感觉是不需要什么生命周期管理了,因为shared_ptr就是做这个的,但ascs在发起异步调用时,并没有把关联对象用shared_ptr包装并传给回调函数对象(而传的是this指针),这会造成当回调函数被调用时,关联

2020-09-13 10:59:20 329

原创 ascs 简明开发教程(十六):如何运行时替换解包器

QQ交流群:198941541ascs需要的解包器其实是一个i_unpacker<typename Unpacker::msg_type>对象指针,但构造client_socket_base和server_socket_base时,为什么需要具体的打包解包器类呢(或者通过宏ASCS_DEFAULT_PACKER和ASCS_DEFAULT_UNPACKER定义)?这是因为ascs无法创建i_unpacker对象,它是抽象的。所以假设你有两个解包器unpacker1和unpacker2,只要它们

2020-07-30 15:51:37 334

原创 ascs 简明开发教程(十五):如何编写解包器

QQ交流群:198941541解包器必须从ascs::i_unpacker继承,i_unpacker接口定义如下:template<typename MsgType>class i_unpacker{public: typedef MsgType msg_type; typedef const msg_type msg_ctype; typedef std::list<msg_type> container_type; typedef ASCS_RECV_BU

2020-07-25 19:40:26 329

原创 otl_stream 和 otl_connect 的 auto_commit 解惑

OTL是一套用于访问多种数据库的类库,支持按ODBC和数据库自身提供的API来访问数据库。在其提供的otl_connect和otl_stream里面,都有一个auto commit属性,文档里面说

2020-07-19 14:36:36 575

原创 ascs 简明开发教程(十四):如何编写打包器

QQ交流群:198941541解包器必须从 ascs::i_packer继承,i_packer接口定义如下:template<typename MsgType>class i_packer{public: typedef MsgType msg_type; typedef const msg_type msg_ctype; typedef std::list<msg_type> container_type;protected: virtual ~i_pa

2020-07-18 14:33:50 353

原创 ascs 简明开发教程(十三):发送接收消息类型

QQ交流群:198941541发送消息类型由打包器决定,打包器都继承自template<typename MsgType> class i_packer,继承之后,你将自动得到如下定义:template<typename MsgType>class i_packer{public: typedef MsgType msg_type; typedef const msg_type msg_ctype; typedef list<msg_type> c.

2020-06-22 14:19:13 365

原创 ascs 简明开发教程(十二):查询优化、消息队列优化

QQ交流群:198941541查询显然是容器上的操作,所以这里说的查询优化对server_base和multi_client_base类均有效。查询除了大家熟悉的find,exist等调用外,do_something_to_all和do_something_to_one也算,如果你经常需要多线程查询,那么用共享锁是推荐的做法,前提是std::shared_mutex或者std::timed_shared_mutex可用。通过宏ASCS_SHARED_LOCK_TYPE定义共享锁的类型(比如std::

2020-05-31 18:33:17 384

原创 ascs 简明开发教程(十一):如何限速

QQ交流群:198941541消息发送总是由使用者触发,所以速度限制由你自己实现。重点是消息接收的限速,默认情况下,ascs库总是尽量的多接收多派发消息,如果你想要接收限速,可以有几种方法:1.同步消息接收,这个跟消息发送一样,由使用者触发,所以你可以自己实现速度限制;2.被动消息接收,ascs会在连接建立起来之后,自动调用一次recv_msg,以后将完全由使用者自己调用recv_msg来接收数据,可多次调用,但只会有一次读取的效果;3.故意在on_msg_handle里面返回fa...

2020-05-23 19:11:25 328

原创 ascs 简明开发教程(十):启动优化,对象池及对象恢复(服务端)

QQ交流群:198941541如果你的socket的创建很耗时,你可以在服务器启动之前预先创建足够多的socket对象,定义宏ASCS_ASYNC_ACCEPT_NUM,或者重写virtual int server_base::async_accept_num()即可。比如你写个网游服务器,一台服务最多支持10000个玩家,可以让服务器在启动之前先预先创建10000个玩家,这样玩家登陆就会非常快,提高用户体验。但有个问题你必须要知道,ascs在每接受一条连接之后,会马上再创建一个socket,以总是

2020-05-10 21:39:39 496

原创 ascs 简明开发教程(九):注意事项

QQ交流群:1989415411.什么是service线程?是的是ascs库使用的工作线程,个数由service_pump::start_service(int)指定,默认8个。可以运行时增加,调用service_pump::add_service_thread(int)即可,如果你想运行时减少,则需要定义宏ASCS_DECREASE_THREAD_AT_RUNTIME,然后调用serv...

2020-04-29 00:11:40 658

原创 ascs 简明开发教程(八):消息接收与发送

QQ交流群:198941541同步消息发送需要定义宏ASCS_SYNC_SEND,定义之后你将得到sync_send_msg,sync_send_native_msg,sync_safe_send_msg和 sync_safe_send_native_msg函数用于同步消息发送,签名跟异步消息发送函数(send_msg,send_native_msg,safe_send_msg和 sa...

2020-04-26 16:32:33 462

原创 ascs 简明开发教程(七):消息派发

QQ交流群:198941541还记得以前我们说过,数据经过解包器之后(所以我称之为消息)开始派发,派发有三种方式:1.重写virtual size_t on_msg(list<OutMsgType>& msg_can)虚函数,需要定义ASCS_SYNC_DISPATCH宏,我称之为同步派发,即解包之后消息不放入缓存,而是直接回调on_msg函数(一次解包是可以得到...

2020-04-11 11:28:49 410

原创 ascs 简明开发教程(六):类层次介绍

QQ交流群:198941541以tcp为例,udp和tcp类似(只是类的名字不同),ssl和tcp完全一样,只是命名空间不一样:service_pump相当于asio::io_context,它负责创建(可动态)service线程(调用asio::io_context::run的线程),启停各种service,service_pump和asio::io_context一样,本身与网络编程无...

2020-04-05 12:53:54 452

原创 ascs 简明开发教程(五):连接状态转换及生命周期管理

QQ交流群:198941541客户端:multi_client +断线自动重连(此时开不开启对象重用都一样):add_socket -> on_connect -> on_recv_error -> on_close -> after_close -> on_connect -> ...multi_client +对象重用(关闭自动重连,注意...

2020-04-02 21:08:39 376

原创 ascs 简明开发教程(四):多连接管理(服务端)

QQ交流群:198941541服务端天生支持多连接,想只支持一条连接反而需要额外的工作量,这个我们留到讲服务端启动优化时再说,敬请期待。由于服务端连接是被动生成的,所以它不能像客户端那样管理连接(仅限于ascs 简明开发教程(3)里面介绍的方法)。为此你必须建议你自己的映射关系,先说说ascs多连接管理原理:每个新接受的连接,服务端会得到一个server_socket_base对象并为...

2020-03-22 11:45:26 429

原创 ascs 简明开发教程(三):多连接管理(客户端)

QQ交流群:198941541接前一篇:ascs 简明开发教程(2)为了让客户端支持任意条数的连接,我们需要修改一下ascs 简明开发教程(1)里面的代码,用multi_client代替single_client,如下:#include <iostream>#include <ascs/ext/tcp.h>using namespace ascs;us...

2020-03-20 22:18:17 24599

原创 ascs 简明开发教程(二):稍加深入

接前一篇:ascs 简明开发教程(1)那么ascs在后面做了什么,让这个cs程序能快速的搭建起来呢?首先看server的定义:typedef ascs::tcp::server_socket_base<ASCS_DEFAULT_PACKER, ASCS_DEFAULT_UNPACKER> server_socket;typedef ascs::tcp::server_b...

2020-03-16 22:51:54 818 1

原创 ascs 简明开发教程(一):初见

ascs前面的as跟asio前面的as意义完全一样,这也从侧面说明了ascs与asio的关系,后面的cs是client/server结构的意思。ascs是基于asio的cs框架,并不是简单的对asio的封装,因为asio已经封装的够好了,而且据说它已经在被纳入c++标准的过程中,...

2020-03-16 12:57:19 2162 3

原创 C/S框架 st_asio_wrapper 开发教程——宏(2019.10.17更新)

1.全局宏,服务端客户端均需要:ST_ASIO_USE_STEADY_TIMER 定时器采用boost::asio::steady_timer来实现。 ST_ASIO_USE_SYSTEM_TIMER 定时器采用boost::asio::system_timer来实现,否则将采用boost::asio::deadline_timer来实现。 ST_ASIO_MAX_...

2016-03-25 10:01:43 3846 5

原创 C/S框架 st_asio_wrapper 开发教程(2019.10.17更新)(五)

如果你偶然浏览到这里,请先看C/S框架 st_asio_wrapper 开发教程(一)源代码及例程下载地址:git:https://github.com/youngwolf-project/st_asio_wrapper/。QQ交流群:198941541十二:高级应用 如果必须要处理一个耗时业务,如何避免影响所有连接,包括自己的数据收发呢,推荐的方法是,当要处理耗时业...

2013-08-07 22:56:39 5614 3

原创 vc2012的c++0x特性对std::move的支持测试

最近对我的开源库st_asio_wrapper(基于boost.asio的c/s框架)做了个详细的检查,主要是看看在防止内存拷贝上是否达到了我的预期,vc2012的结果似乎不满意(相对于gcc4.7来说),我哪里写法有误吗?注:测的不是很全面,主要是std::string boost::container::list boost::bind等st_asio_wrapper用到的东西。测

2013-01-31 20:51:21 4324

原创 st_asio_wrapper使用FAQ(2019.10.17更新)

Q:tcp服务端(server_base)和tcp客户端(client_socket_base)都有个函数set_server_addr,有何区别?A:典型的网络编程基本知识,服务端设置的是监听地址,客户端设置的是连接地址,这个问题并不是st_asio_wrapper特有的,属于网络编程基础知识。Q:如何不让client_socket_base重连接?A:重连接分两种情况,首次连接和断...

2012-11-11 17:13:07 8199 47

原创 C/S框架 st_asio_wrapper 开发教程(2019.10.17更新)(四)

如果你偶然浏览到这里,请先看C/S框架 st_asio_wrapper 开发教程(一)源代码及例程下载地址:git:https://github.com/youngwolf-project/st_asio_wrapper/。QQ交流群:198941541九:陷阱大家都知道多线程死锁,进程间死锁,今天我要说的是,两台网络通信中的电脑,也会死锁,不可思议吧?那么st_a...

2012-09-09 16:58:25 7103 6

原创 MFC ActiveX 接口数据类型,伤不起!

要不是因为我一直在维护一个曲线绘制控件(www.st-curve.cn),我真的很不想再碰MFC的ActiveX了,其中怎一个乱字了得!回想起来,似乎还是vc6最好,后来我相继升级到了vc2003 2008 2010,每次升级都让我很受伤!注:MFC ActiveX以下简称控件。这个乱,至少涉及到3个部件:一:编译odl或者idl文件的编译器,它应该会生成控件的tlb文件(

2012-08-02 10:43:40 7438 2

原创 C/S框架 st_asio_wrapper开发教程(2019.10.17更新)(三)

如果你偶然浏览到这里,请先看C/S框架 st_asio_wrapper 开发教程(一)源代码及例程下载地址:git:https://github.com/youngwolf-project/st_asio_wrapper/。QQ交流群:198941541七:自定义数据结构支持当st_asio_wrapper server与其它客户端、或者st_asio_wrapper client...

2012-07-16 21:01:02 7288 14

原创 C/S框架 st_asio_wrapper 开发教程(2019.10.17更新)(二)

如果你是偶然浏览到这里,请先看C/S框架 st_asio_wrapper 开发教程(一)源代码及例程下载地址:git:https://github.com/youngwolf-project/st_asio_wrapper/。QQ交流群:198941541六:开发教程(服务端)服务端直接#include ext/tcp.h,就可实现一个简单的服务端了,如下(还演示了一个echo服务...

2012-07-07 15:28:41 7991 8

ascs(1.4.3).zip

最新版本ascs,截止2019.10.17 要想随时保持更新,建议访问github.com

2019-10-17

st_asio_wrapper(2.2.3).zip

最新版本st_asio_wrapper,截止2019.10.17 要想随时保持更新,建议访问github.com

2019-10-17

st_asio_wrapper最新版(2016.1.9)

推荐去https://github.com/youngwolf-project/st_asio_wrapper.git更新,我的资源里面会不定期更新到最新版,但不会及时。

2016-01-09

st_asio_wrapper最新版(2016.1.8)

推荐去https://github.com/youngwolf-project/st_asio_wrapper.git更新,我的资源里面会不定期更新到最新版,但不会及时。

2016-01-08

st_asio_wrapper一组包装boost.asio的c/s框架(2.3版)

st_asio_wrapper是一组类库,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步(当然这是从boost.asio继承而来)、自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 2.3版更新内容: 消息(std::string包装)不再用boost::shared_ptr包装,之前有过度使用智能指针之嫌。效率上,std::string如果支持引用记数,或者编译器支持std::move语义,是没有损失的(因为也不存在内存的拷贝,反而省了智能指针使用上的开销),幸好vc支持std::move语义(虽然它不支持引用记数,linux则都支持)。这样带来一个问题,原来所有的接口中的boost::shared_ptr<std::string>数据类型,全部换成了std::string引用,升级到2.3的朋友要注意修改之前重写虚函数的签名,如果不改,则重写肯定不生效,变成了新增加虚函数了(因为签名不一样)。这样向大家道歉,接口签名以后应该不会变化了,但可能增加接口; 修复使用std::advance的一个BUG,此BUG在linux下不存在,这里顺便向大家说一下,std::advance在vc和gcc下面,语义一样,但处理方式有些不同,一定要注意; 增加了个专门用于服务端压力测试的客户端框架st_test_client,并写了一个demo test_client,可以在performance_test目录下面找到; 把连接服务端逻辑从st_client剥离出来,定义了一个新的类st_connector,st_client和st_test_client将从它继承; 增加对vc2010的支持,和编译时对编译器版本的检测,如果达不到vc2010及其以上的版本,st_asio_wrapper将直接报错。

2012-10-07

st_asio_wrapper——一组包装boost.asio的c/s框架(2.3版)

st_asio_wrapper是一组类库,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步(当然这是从boost.asio继承而来)、自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 2.3版更新内容: 消息(std::string包装)不再用boost::shared_ptr包装,之前有过度使用智能指针之嫌。效率上,std::string如果支持引用记数,或者编译器支持std::move语义,是没有损失的(因为也不存在内存的拷贝,反而省了智能指针使用上的开销),幸好vc支持std::move语义(虽然它不支持引用记数,linux则都支持)。这样带来一个问题,原来所有的接口中的boost::shared_ptr<std::string>数据类型,全部换成了std::string引用,升级到2.3的朋友要注意修改之前重写虚函数的签名,如果不改,则重写肯定不生效,变成了新增加虚函数了(因为签名不一样)。这样向大家道歉,接口签名以后应该不会变化了,但可能增加接口; 修复使用std::advance的一个BUG,此BUG在linux下不存在,这里顺便向大家说一下,std::advance在vc和gcc下面,语义一样,但处理方式有些不同,一定要注意; 增加了个专门用于服务端压力测试的客户端框架st_test_client,并写了一个demo test_client,可以在performance_test目录下面找到; 把连接服务端逻辑从st_client剥离出来,定义了一个新的类st_connector,st_client和st_test_client将从它继承; 增加对vc2010的支持,和编译时对编译器版本的检测,如果达不到vc2010及其以上的版本,st_asio_wrapper将直接报错。

2012-10-05

st_asio_wrapper——一组包装boost.asio的c/s框架(2.2版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。 1.6版更新内容: 增加了接收消息缓存(改动较大,on_msg的语义有所变化,请看开发教程第三篇)。 1.7版更新内容: 修复vc2010下编译错误; 修复默认解包器BUG(同时修改解包器接口); 修复log输出BUG; 更好的包装了服务端类库,现在服务端可以像客户端一样简单的使用了(完全不用继承或者重写虚函数,申请一个对象即可); 结构大调整,类名大调整,请参看开发教程第一篇。 1.8版更新内容: 增加健壮性和稳定性; 退出服务更新优雅。 1.9版更新内容: 提高代码通用性; 可以指定服务端同时投递多少个async_accept; 修复BUG,此BUG可能造成数据发送不完全。 2.0版更新内容: 服务端增加对象池功能; 优化美化代码; 更规范化接口签名。 2.1版更新内容: 修复BUG,此BUG会造成st_client在stop_service之后,仍然可能尝试重新连接服务器; 在消息发送的时候,增加了一个参数can_overflow,用于确定是否在缓存满的时候返回失败,这在某些不能阻塞等待直到缓存可用的场合非常有用,比如on_msg; 当消息接收缓存满的时候,st_socket现在可以保证消息不丢失,之前的行为是调用on_recv_buffer_oveflow之后,丢弃消息; 更规范化接口签名; 更多更新请看st_asio_wrapper_socket.h,所有更新都会罗列在这个头文件的开头处,另外st_asio_wrapper_server.h的开头部分注释也很重要,有工作原理相关的说明。 2.2版更新内容: 增加了一个demo——文件传输服务端及客户端,它几乎可以当成软件来使用,多线程且支持分块传送; 增加了timer功能,考虑到st_server已经用上了timer,加之做文件传输服务器的时候,也用到了timer,所以干脆把timer抽象出来,其设计原理及使用跟MFC的timer差不多。timer已经被st_socket和st_server继承。用的时候,调用set_timer开始timer,重写on_timer虚函数等待被调用即可; 进一步优化消息接收缓存,通过宏,让优化发生于编译阶段,参看FORCE_TO_USE_MSG_RECV_BUFFER宏以了解更多。demo里面有使用案例(asio_server,asio_client,file_server,file_client,performance/asio_client); 增加了所有的宏都可以在外面修改的功能,在include类库头文件之前,可以定义你想要的宏,st_asio_wrapper不会修改它们,除非它们没有被定义,此时使用默认值,这也是st_asio_wrapper之前设计不好的地方,具体请参看使用教程。

2012-09-20

st_asio_wrapper一组boost.asio包装类(2.1版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。 1.6版更新内容: 增加了接收消息缓存(改动较大,on_msg的语义有所变化,请看开发教程第三篇)。 1.7版更新内容: 修复vc2010下编译错误; 修复默认解包器BUG(同时修改解包器接口); 修复log输出BUG; 更好的包装了服务端类库,现在服务端可以像客户端一样简单的使用了(完全不用继承或者重写虚函数,申请一个对象即可); 结构大调整,类名大调整,请参看开发教程第一篇。 1.8版更新内容: 增加健壮性和稳定性; 退出服务更新优雅。 1.9版更新内容: 提高代码通用性; 可以指定服务端同时投递多少个async_accept; 修复BUG,此BUG可能造成数据发送不完全。 2.0版更新内容: 服务端增加对象池功能; 优化美化代码; 更规范化接口签名。 2.1版更新内容: 修复BUG,此BUG会造成st_client在stop_service之后,仍然可能尝试重新连接服务器; 在消息发送的时候,增加了一个参数can_overflow,用于确定是否在缓存满的时候返回失败,这在某些不能阻塞等待直到缓存可用的场合非常有用,比如on_msg; 当消息接收缓存满的时候,st_socket现在可以保证消息不丢失,之前的行为是调用on_recv_buffer_oveflow之后,丢弃消息; 更规范化接口签名; 更多更新请看st_asio_wrapper_socket.h,所有更新都会罗列在这个头文件的开头处,另外st_asio_wrapper_server.h的开头部分注释也很重要,有工作原理相关的说明。

2012-09-09

st_asio_wrapper一组boost.asio包装类(2.0版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.51.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper c

2012-09-02

st_asio_wrapper一组boost.asio包装类(1.9版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。 1.6版更新内容: 增加了接收消息缓存(改动较大,on_msg的语义有所变化,请看开发教程第三篇)。 1.7版更新内容: 修复vc2010下编译错误; 修复默认解包器BUG(同时修改解包器接口); 修复log输出BUG; 更好的包装了服务端类库,现在服务端可以像客户端一样简单的使用了(完全不用继承或者重写虚函数,申请一个对象即可); 结构大调整,类名大调整,请参看开发教程第一篇。 1.8版更新内容: 增加健壮性和稳定性; 退出服务更新优雅。 1.9版更新内容: 提高代码通用性; 可以指定服务端同时投递多少个async_accept; 修复BUG,此BUG可能造成数据发送不完全。

2012-08-28

st_asio_wrapper一组boost.asio包装类(1.8版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。 1.6版更新内容: 增加了接收消息缓存(改动较大,on_msg的语义有所变化,请看开发教程第三篇)。 1.7版更新内容: 修复vc2010下编译错误; 修复默认解包器BUG(同时修改解包器接口); 修复log输出BUG; 更好的包装了服务端类库,现在服务端可以像客户端一样简单的使用了(完全不用继承或者重写虚函数,申请一个对象即可); 结构大调整,类名大调整,请参看开发教程第一篇。 1.8版更新内容: 增加健壮性和稳定性; 退出服务更新优雅。

2012-08-24

st_asio_wrapper一组boost.asio包装类(1.7版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。 1.6版更新内容: 增加了接收消息缓存(改动较大,on_msg的语义有所变化,请看开发教程第三篇)。 1.7版更新内容: 修复vc2010下编译错误; 修复默认解包器BUG(同时修改解包器接口); 修复log输出BUG; 更好的包装了服务端类库,现在服务端可以像客户端一样简单的使用了(完全不用继承或者重写虚函数,申请一个对象即可); 结构大调整,类名大调整,请参看开发教程第一篇。

2012-08-15

st_asio_wrapper一组boost.asio包装类(1.6版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。 1.6版更新内容: 增加了接收消息缓存(改动较大,on_msg的语义有所变化,请看开发教程第三篇)。

2012-08-07

st_asio_wrapper一组boost.asio包装类(1.5版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。 1.5版更新内容: 增加ipv6支持,默认是ipv4,服务端和客户端都通过设置一个ipv6的地址来开启这个功能; 增加了一些服务端helper函数,小改了一下客户端set_server_addr函数签名(调换了两个参数的位置以保持和服务端一样)。

2012-08-02

st_asio_wrapper一组boost.asio包装类(1.4版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。 1.4版更新内容: 将打包与解包器从client_base分离出来,以简化这个日益复杂的基类; 可以在运行时修改打包解包器。

2012-07-27

st_asio_wrapper一组boost.asio包装类(1.3版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。 1.3版更新内容: 增加自定义消息格式的发送,这个本来是在1.1版本实现的,结果我漏掉了,只实现了自定义消息格式的接收。

2012-07-24

st_asio_wrapper一组boost.asio包装类(1.2版本)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。 1.2版更新内容: 修复BUG:当stop_service之后,再start_service时,client_base内部某些成员变量可能没有得到复位; 服务端增加修改监听地址功能,当然仍然要在start_service之前调用set_server_addr函数。

2012-07-21

st_asio_wrapper一组boost.asio包装类(1.2版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了); 1.2版更新内容(主要是BUG修复): 修复BUG:当stop_service之后,再次start_service时,一些内部成员变量没有复位;增加了list_all_client函数用于在服务端显示所有客户;

2012-07-20

st_asio_wrapper一组boost.asio包装类(1.1版)

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 教程:http://blog.csdn.net/yang79tao/article/details/7724514 1.1版更新内容: 增加了自定义数据模式的支持,可用于st_asio_wrapper server与其它客户端的通信、或者st_asio_wrapper client与其它服务端的通信;当然,两端都是st_asio_wrapper的话,就用透明传输即可(1.0版已经支持了)。

2012-07-16

st_asio_wrapper一组boost.asio包装类

st_asio_wrapper是一组类,功能是对boost.asio的包装(调试环境:boost-1.50.0),目的是简化boost.asio开发; 其特点是效率高、跨平台、完全异步,当然这是从boost.asio继承而来; 自动重连,数据透明传输,自动解决分包粘包问题(你可以像udp一样使用它); 注:只支持tcp协议; 使用教程最近会放出来,请看我的csdn博客。

2012-07-07

多功能曲线控件

一个ActiveX控件,可绘制所有一元方程(即只有两个坐标轴的曲线),本控件的优势在于绘制速度以及翻页速度,采用了双向链表、双缓冲等技术。该控件提供140左右个方法,基本上任何地方都可定制。<br>注意,本控件是给二次开发者使用的。<br>下载下来的软件包中,我做了个简单的demo(还有好多功能没有演示),大家可以试试效果,如果大家觉得还可以,就联系我(绝对不收一分钱,我只想知道有没有人使用我的软件),我会发送一个开发文档给你,里面有每个函数的详细使用方法。我的邮箱是:mail2tao@163.com<br>软件包下载后,请先看《说明.txt》文件。

2008-04-30

多功能曲线控件

一个ActiveX控件,可绘制所有一元方程(即只有两个坐标轴的曲线),本控件的优势在于绘制速度以及翻页速度,采用了双向链表、双缓冲等技术。该控件提供140左右个方法,基本上任何地方都可定制。<br>注意,本控件是给二次开发者使用的。<br>下载下来的软件包中,我做了个简单的demo(还有好多功能没有演示),大家可以试试效果,如果大家觉得还可以,就联系我(绝对不收一分钱,我只想知道有没有人使用我的软件),我会发送一个开发文档给你,里面有每个函数的详细使用方法。我的邮箱是:mail2tao@163.com<br>软件包下载后,请先看《说明.txt》文件。

2008-03-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除