当前位置: 首页> 教育> 就业 > asio之服务的理解

asio之服务的理解

时间:2025/7/12 6:10:04来源:https://blog.csdn.net/wuli2496/article/details/141758682 浏览次数:0次

服务组件

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之服务的理解

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: