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

31 篇文章 0 订阅
31 篇文章 1 订阅

QQ交流群:198941541

以tcp为例,udp和tcp类似(只是类的名字不同),ssl和tcp完全一样,只是命名空间不一样:

service_pump相当于asio::io_context,它负责创建(可动态)service线程(调用asio::io_context::run的线程),启停各种service,service_pump和asio::io_context一样,本身与网络编程无关,只是个异步回调派发器。

那么什么是service呢,它是指实现了i_service接口的对象,包括single_client_base,multi_client_base,server_base。这些service会随着service_pump的start_service和stop_service而启停。同时,这些service要么本身继承自socket(仅支持单条连接),要么就是个容器(支持多条连接),容器都继承自object_pool,所以支持对象重用。

动态增减的service如何启停呢?一是可以调用带i_service*参数的service_pump的start_service和stop_service,二是可以调用i_service的start_service和stop_service。

如何启停某条连接呢?推荐是可以调用socket的启停函数(比如force_shutdown,start),对于single_client_base,你还可以调用i_service的start_service和stop_service。

注意一个service_pump是可以管理多个service的,所以只有在退出进程的时候,才调用其stop_service(不需要i_service*参数的那个版本)。

另外,socket和object_pool都继承自timer,所以你可以很方便地在socket里面和容器里面使用定时器。

 

下面是一些推荐的继承起始点(前面说了,你至少得继承socket得到自己的socket,因为你需要处理数据):

1. 单条连接,可以继承自single_client,也可以继承自client_socket,然后用的时候single_client_base<your_socket> c(sp);,如果你需要传入自定义的打包解包器,则只能用后一种方法;

2. 多条连接,只能继承自client_socket(需要传入打包解包器就是client_socket_base),然后用的时候multi_client_base<your_socket> c(sp);,如果你觉得容器multi_client_base提供的功能不够用,则你需要继承它,然后用的时候your_multi_client<your_socket> c(sp);;

3. 服务端只能继承自server_socket(需要传入打包解包器就是server_socket_base),然后用的时候server_base<your_socket> s(sp);,如果你觉得容器server_base提供的功能不够用,则你需要继承它,然后用的时候your_server<your_socket> s(sp);;

4. socket支持的模板参数还很多,你甚至还可以指定输入输出消息的类型,容器(队列使用的)类型和队列类型;容器类还支持自定义object_pool,这些我们留到以后再讲,敬请期待。

上一篇:ascs 简明开发教程(5)下一篇:ascs 简明开发教程(7)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值