BOOST.ASIO源碼剖析(二) ---- 架構淺析

架構淺析react

 

先來看一下asio的0層的組件圖。windows

                

                                   (圖1.0)網絡

 

      io_object是I/O對象的集合,其中包含你們所熟悉的socket、deadline_timer等對象,主要功能是提供接口給用戶使用。多線程

      services服務是邏輯功能的實現者,其中包含提供定時功能的deadline_timer_service、提供socket相關功能的win_iocp_socket_service(windows平臺)/reactive_socket_service(其餘平臺)、做爲io_service功能的真正實現者win_iocp_io_service(windows平臺)/task_io_service(其餘平臺)等等服務。架構

      "Asio核心組件"在這一層中能夠理解爲就是io_service,它經過關聯的類service_registry將實現具體功能所需的服務組合起來,再由io_object提供接口給用戶使用。
      這三大組件構成了asio的核心架構,asio的一切都是以此爲根基衍生擴展出來的。socket

 

讓咱們將圖1.0進一步細化:
                            
                                  (圖1.1)線程

      「Asio核心組件」細化爲4個類:io_service,service_registry,service,service_base。其中,service_registry負責管理全部服務,使用延遲建立技術,在真正使用服務對象的時候才建立服務對象,並以單鏈表的方式管理,但只能增不能刪,直到service_registry析構時纔會釋放其管理的服務對象。service是io_service的類中類,是一個虛基類,全部由service_registry管理的服務都必須從service派生。service_base是service的直接派生類,是services繼承體系的第二級,組合了service_id<Type>,目前asio中全部服務均繼承與service_base。
      「I/O對象」細化爲basic_io_object及其派生類。basic_io_object是全部I/O對象的基類,提供I/O對象與其對應服務的聯繫。對象



再將圖1.1進一步細化(關注網絡I/O方面的一些類,其餘方面的類未畫出):blog

                                                              (圖1.2)繼承

 

      io_service的真正邏輯實現封裝在內部橋接的類io_service_impl中,io_service_impl是一個typedef(在windows平臺下是win_iocp_io_service,其餘平臺下是task_io_service)。io_service_impl就是一個繼承於service_base的服務,在io_service初始化也就是其關聯類service_registry初始化時被建立,再由io_service持有其引用。


      從圖中能夠看到,繼承於service_base的服務有:

            strand_service:提供串行化多線程調用的功能

            deadline_timer_service:提供定時器功能

            stream_socket_service:提供流式socket相關功能

            datagram_socket_service:提供報文式socket相關功能

            seq_packet_socket_service:提供seq_packet socket相關功能

            raw_socket_service:提供原始套接字相關功能

            socket_acceptor_service:提供端口監聽和接受客戶端鏈接相關功能

      這些服務都是幕後英雄,對於用戶而言是感知不到的,用戶使用的都是其對應的I/O對象。

      這些服務對應的I/O對象是:

            io_service::strand

            basic_deadline_timer

            basic_stream_socket

            basic_datagram_socket

            basic_seq_packet_socket

            basic_raw_socket

            basic_socket_acceptor

      除此以外,asio中還有串口通訊、信號處理等功能,在此再也不一一贅述。

相關文章
相關標籤/搜索