本文主要是介绍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> & )
{ key. type_info_ = & typeid ( typeid_wrapper< Service> ) ; key. id_ = 0 ;
}
# endif 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来区分不同的服务
通过类模板来区分不同的服务类型
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之服务的理解的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!