插件服務設計方案

1、功能概述linux

1、概述函數

插件是遵循必定規範的應用程序接口編寫出來的程序,獨立於主程序並對主程序起輔助性質做用。使用插件的做用以下:spa

(1)將功能獨立於主程序,保證主程序穩定的同時,方便功能的擴展。 插件

(2)下降模塊之間的依賴,便於並行開發。 設計

       (3)更新量小,當底層接口不變時,只須要更新以服務、插件形式存在的功能。xml

插件服務實現加載動態連接庫的功能,並提供有動態增長、調用和刪除服務或插件的方法。經過調用動態連接庫中導出函數,獲取插件和服務實例,並在多個服務或插件之間進行中介聯繫,可以相互訪問而不直接發生聯繫,統一管理全部服務或插件的整個生命週期。對象

 

二、  總體設計思路接口

      (1)單例模式生命週期

插件服務使用單例模式,在全部地方都共用一個插件服務實例。進程


(2)調用動態連接庫

經過配置文件讀取,得到全部要加載的動態連接庫路徑和服務或插件名。將動態連接庫路徑做爲參數傳遞給LoadLib()函數進行動態連接庫的加載。

(a)在window平臺中,三個加載動態連接庫的重要函數以下:

        LoadLibrary():動態加載指定的動態連接庫,將其映射到當前進程使用的地址空間。

        GetProcAddress():檢索指定的動態連接庫中的輸出庫函數地址。

        FreeLibrary():釋放指定的動態連接庫。對LoadLibrary的每一次調用都應該有一個對應的FreeLibrary調用。

(b)在linux平臺下,相應的三個函數分別是:

        dlopen():以指定模式加載指定的動態連接庫。

        dlsym():根據動態連接庫操做句柄與符號,返回符號對應的地址。使用這個函數不但能夠獲取函數地址,也能夠獲取變量地址。

        dlclose():關閉指定句柄的動態連接庫,只有當此動態連接庫的使用計數爲0時,纔會真正被系統卸載。

 

(3)調用服務或插件

       在插件服務中提供GetService()和GetPlugin()進行服務和插件的調用,並使用m_servItems和m_pluginItems兩個map型集合進行服務和插件的存儲管理。當服務或插件已經存在時直接從這兩個集合中獲取服務或插件,當不存在時則調用服務或插件的動態連接庫,使用動態連接庫中CreateObject導出函數來建立對象,並進行服務或插件的存儲。

 

2、功能設計

一、 設計原則

       (1) 實現配置文件的讀取。

藉助tinyxml輔助類進行xml文件的讀取,得到配置文件中須要加載的服務或插件名和相應動態連接庫的路徑。

 

        (2) 實現動態連接庫的加載

在linux環境中使用dlopen()、dlsym()和dlclose()函數進行動態連接庫的加載、函數地址獲取和動態連接庫關閉的操做。

 

        (3)實現服務和插件的管理

在插件服務中使用m_servItems和m_pluginItems兩個map型集合進行服務和插件的存儲管理。經過GetService()和GetPlugin()函數進行服務和插件的調用,使用Add()和Delete()函數增長和刪除服務或插件。

 

二、 數據模型列表

序號

數據名稱

類型

含義

1

m_libHandle

void*

動態連接庫句柄

2

m_libName

const char*

動態連接庫名稱

3

m_libItems

map

服務或插件名和動態連接庫實例

4

m_serviceItems

map

服務名和服務實例

5

m_pluginItems

map

插件名和插件實例

 

三、 功能列表以下:

序號

功能名稱

相關函數

處理方式

1

調用動態連接庫

LoadLib()

調用dlopen()函數加載動態連接庫

2

獲取服務或插件實例

GetService()

GetPlugin()

調用dlsym()函數獲取CreateObject導出函數地址,獲取服務或插件實例

3

管理服務或插件實例

AddService()

DeleteService()

AddPlugin()

DeletePlugin()

使用兩個map類型的集合對服務、插件集合進行管理。根據服務名或插件名在集合中查找實例,當不存在時則加入到集合中,當存在時則在GetService()和GetPlugin()中返回該實例。

4

釋放動態連接庫

FreeLib()

調用dlclose()函數釋放動態連接庫

 

3、核心設計

一、 數據流程圖

 

二、 類圖


三、 時序圖

相關文章
相關標籤/搜索