• 沒有找到結果。

第三章、 設計與實作

3.1 應用層框架一般化

3.1.2 實作方式

在這章節中,應用層框架一般化較詳細的執行流程,包括應用層、網格核心 模組、網格圖形使用者介面模組三個部分,以下將針對這三個模組進行介紹。

 應用層:

在應用層這部分,主要為電腦對局應用問題的演算法核心,所以我們將其切 分 為 工 作 產 生 器 (JobGenerator) 、 網 格 接 口 (Grid Interface) , 和 應 用 層 接 口 (Application Interface)三個執行模組,整個應用層的執行模組圖可參照圖表 15。

在工作產生器部分,即為電腦對局應用問題的演算法核心,在系統運作的期

22

間,會產生新的應用工作,包括當工作被丟到遠端電腦時,人工智慧頇(AI)要用 到的參數、執行檔名稱…等,並依照先前執行完畢的工作結果產生相應的工作處 理。

在網格接口部分,扮演著工作產生器與網格核心模組之間的溝通橋樑,讓工 作產生器可以藉由這個接口裡的 SubmitJob()函式將產生的新應用工作轉往網格 核心模組去統一控管,工作產生器也可以透過這個接口裡的 AbortJob()告知網格 核心模組將工作取消。

在應用層接口部分,與網格接口一樣扮演著工作產生器與網格核心模組之間 的溝通橋樑,但不同的是,網格接口為工作產生器將訊息傳往網格核心模組的接 口,應用層接口則是網格核心模組將訊息傳往工作產生器的接口,網格核心模組 可透過呼叫 Init()對工作產生進行初始化,若協商者向用戶端要求一個應用工作 時,網格核心模組發現沒有等待的應用工作時,可透過 GetAppJob()取得一個應 用工作來執行,當一有應用工作的結果回傳時,網格核心模組可透過 Message() 傳送工作執行實的結果訊息,若有工作執行失敗時,網格核心模組會呼叫 Crash() 告知工作產生器執行失敗的訊息,若工作執行完畢時,網格核心模組會透過 JobDone()通知工作產生器工作已執行完畢。

圖表 15 Application 執行模組圖

23

 網格核心模組:

在網格核心模組這部分,主要負責所有與協商者連線相關的事情,包括編碼 器(Encoder)、標準輸入輸出(I/O)、解碼器(Decoder)、系統接口(System Interface)、

指令處理者(Command Handlers)這幾個部分。

在編碼器部分,負責將用戶端產生的指令轉為可與協商者溝通的訊息格式,

InitUser Virtual void InitUser() NextJob Virtual void NextJob() AssignDone Virtual void AssignDone () Running Virtual void Running () JobCrashed Virtual void JobCrashed ()

WorkerDisconnected Virtual void WorkerDisconnected () Info Virtual void Info ()

24

整個格網核心模組圖表 17,若是以六子棋為例,說明整個格網核心模組的 流程,在發送指令時會有下列步驟:

1. 六子棋產生送出盤面的指令 。

2. 編碼器將所產生的指令加入使用者識別碼、工作識別碼、工作端識別碼、應 用程式的名稱、版本編號,以及要執行的工作參數等資訊,並將格式轉換成 與協商者溝通用的 XML 格式。

3. 透過標準輸出將放在 Send Buffer 內容從 Socket 傳送出去。

若是在接收到盤面的運算結果回傳時會有下列處理步驟:

1. 從 Socket 接收到訊息之後,放到 Receive Buffer 中等待處理。

2. 解碼器透過解碼回傳的訊息,轉成用戶端可讀的格式。

3. 系統接口將解碼器轉 換出來的指令 (Message) 對應到相對應的處 理函式 (Message())。

4. 處理函式會將接受到的盤面計算結果告知應用層,應用層則可做相對應的結 果處理。

圖表 17 網格核心模組

25

 網格圖形使用者介面模組:

這部分主要實作一個圖形使用者介面(GUI)的框架,如監看目前工作執行狀 態的圖形使用者介面(可監看工作內容、工作狀態、工作跑的時間)、使用者登入 圖形使用者介面(包括帳號、密碼、優先權、備註等的設定)、工作執行相關初始 設定圖形使用者介面(可設定應用程式名稱與版本及想使用的工作端數量)、監看 工作端系統資訊圖形使用者介面(包括網路位址、中央處理器速度、記憶體大小 等的資訊),以及過濾器圖形使用者介面(可設定要使用的工作端為哪幾台)等部 分。

不論是應用層或網格核心模組皆可透過圖形使用者介面接口(GUI Interface) 對圖形使用者介面進行操作與設定。可透過 CreateStatusPanel()來產生新的圖形 使用者介面,並透過 SetStatusMessage()來設定每個圖形使用者介面欄位要顯示 的訊息,一有訊息更新時可透過呼叫 UpdateStatusMessage()來更新圖形使用者介 面欄位的訊息。整個網格圖形使用者介面模組可表示為圖表 18。

圖表 18 網格圖形使用者介面模組圖

26

相關文件