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

相关文章

关于DNS域名解析服务

《关于DNS域名解析服务》:本文主要介绍关于DNS域名解析服务,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录DNS系统的作用及类型DNS使用的协议及端口号DNS系统的分布式数据结构DNS的分布式互联网解析库域名体系结构两种查询方式DNS服务器类型统计构建DNS域

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语

Linux中SSH服务配置的全面指南

《Linux中SSH服务配置的全面指南》作为网络安全工程师,SSH(SecureShell)服务的安全配置是我们日常工作中不可忽视的重要环节,本文将从基础配置到高级安全加固,全面解析SSH服务的各项参... 目录概述基础配置详解端口与监听设置主机密钥配置认证机制强化禁用密码认证禁止root直接登录实现双因素

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

spring IOC的理解之原理和实现过程

《springIOC的理解之原理和实现过程》:本文主要介绍springIOC的理解之原理和实现过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、IoC 核心概念二、核心原理1. 容器架构2. 核心组件3. 工作流程三、关键实现机制1. Bean生命周期2.

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾