boost.asio源碼剖析(二) ---- 架構淺析


* 架構淺析

 

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

                

                                   (圖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的一切都是以此為根基衍生擴展出來的。

 

讓我們將圖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方面的一些類,其他方面的類未畫出):

                                                              (圖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中還有串口通信、信號處理等功能,在此不再一一贅述。

 

由於本文會實時根據讀者反饋的寶貴意見更新,為防其他讀者看到過時的文章,因此本系列專題謝絕轉載!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM