asio之服务的理解

2024-09-01 01:12
文章标签 服务 理解 asio

本文主要是介绍asio之服务的理解,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

服务组件

asio中的服务抽象为io_service::service

io_service::service
- boost::asio::io_service& owner_
- service* next_
- key key_
+boost::asio::io_service& get_io_service()
#~service()
#service(boost::asio::io_service& owner)
-void shutdown_service()
-void fork_service(boost::asio::io_service::fork_event event)

shutdown_service为虚方法
next_表示下一个服务,主要用于服务的管理,通过将所有的服务连接起来构成一个链表
key的定义为

  struct key{key() : type_info_(0), id_(0) {}const std::type_info* type_info_;const boost::asio::io_service::id* id_;} key_;

key用于区分服务,有两种使用方式,一种是使用service::id,一种是使用type_info

#if !defined(BOOST_ASIO_NO_TYPEID)
template <typename Service>
void service_registry::init_key(boost::asio::io_service::service::key& key,const boost::asio::detail::service_id<Service>& /*id*/)
{key.type_info_ = &typeid(typeid_wrapper<Service>);key.id_ = 0;
}
#endif // !defined(BOOST_ASIO_NO_TYPEID)void service_registry::init_key(boost::asio::io_service::service::key& key,const boost::asio::io_service::id& id)
{key.type_info_ = 0;key.id_ = &id;
}

服务标识

通过id来区分不同的服务

io_service::id
+id()

通过类模板来区分不同的服务类型

service_id<Type>
io_service::id

带有标识的服务

通过类模板service_base来表示带有标识的服务,包含静态类型service_id的成员

service_base<Type>
+ static boost::asio::detail::service_id<Type> id
io_service::service

服务管理

service_registry用于注册管理服务

service_registry
- boost::asio::detail::mutex mutex_
- boost::asio::io_service& owner_
- boost::asio::io_service::service* first_service_
+template ~typename Service, typename Arg~ service_registry(boost::asio::io_service& o, Service* initial_service, Arg arg)
+void notify_fork(boost::asio::io_service::fork_event fork_ev)
+template ~typename Service~ Service& first_service()
+template ~typename Service~ Service& use_service()
+template ~typename Service~ void add_service(Service* new_service)
+template ~typename Service~ bool has_service()
-static void init_key(boost::asio::io_service::service::key& key,const boost::asio::io_service::id& id)
-static bool keys_match(const boost::asio::io_service::service::key& key1,const boost::asio::io_service::service::key& key2)
-template ~typename Service~ static boost::asio::io_service::service* create(boost::asio::io_service& owner)
-static void destroy(boost::asio::io_service::service* service)
-boost::asio::io_service::service* do_use_service(const boost::asio::io_service::service::key& key,factory_type factory)
-void do_add_service(const boost::asio::io_service::service::key& key,boost::asio::io_service::service* new_service)
-bool do_has_service(const boost::asio::io_service::service::key& key)

first_service():返回服务链表中的第一个服务
use_service():如果链表中有对应的服务则直接使用,没有就添加到链表中
add_service(Service* new_service):链表中有则抛出异常,否则添加到链表中
has_service():链表中是否有服务

服务相关函数模板

template <typename Service> Service& use_service(io_service& ios);
template <typename Service> void add_service(io_service& ios, Service* svc);
template <typename Service> bool has_service(io_service& ios);

这篇关于asio之服务的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125527

相关文章

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客

windos server2022的配置故障转移服务的图文教程

《windosserver2022的配置故障转移服务的图文教程》本文主要介绍了windosserver2022的配置故障转移服务的图文教程,以确保服务和应用程序的连续性和可用性,文中通过图文介绍的非... 目录准备环境:步骤故障转移群集是 Windows Server 2022 中提供的一种功能,用于在多个

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危