ACE筆記(一) 選擇ACE的理由

2021-04-02 21:01:27 字數 2267 閱讀 9745

最早看到ace是2年前(2023年)的事情,當時是下了一本《c++網路程式設計》來看,但是因為當時對網路程式設計的理解不深,草草翻了幾頁,覺得比較晦澀,就沒有再看下去。一直到了2023年11月,因為需要編寫乙個效能、結構良好的伺服器,於是就購買了《c++網路程式設計》1、2來看,到了現在,這個伺服器基本成形,剩下的就是再新增業務邏輯,回顧學習使用ace的經過,覺得還是記錄下來比較好,就有了這個系列的文章。我是2023年開始從事程式設計工作,一直使用c c++作為開發語言,因為工作的原因,一直沒有涉及網路程式設計的任務,所以,這些文章肯定會有bug,您可以通過回帖跟我交流。

一般來說,經過了4~5年的程式編寫工作,功能的實現基本不是太大的問題,通過查詢類似的**、演算法書籍等,都能實現所需要的功能,這時,對於程式設計師來說,編寫穩定、高效、良好結構的**就成了首先應該考慮的問題。對於乙個執行在windows server上的服務程式,一般的步驟如下

建立乙個socket控制代碼

將其繫結到指定的埠

開始監聽

進入乙個迴圈

等待客戶端的連線並接受它

使用接受得到的進行業務邏輯的處理

編寫這樣的乙個伺服器程式不是十分困難,例如實現乙個簡單的web伺服器,它僅僅讀取指定的檔案並返回,也許只需要不過100行左右的**,而其他的,包括

等方面的工作卻是每個伺服器程式的實現者所應著重考慮的問題。

ace為就是為了解決這些問題而產生的一套c++中介軟體,ace不能直接完成我們所需要的功能,但是它為完成我們所需要的功能提供了大量的支援,除此而外,ace還有乙個可移植性的重要特色,鑑於我並沒有接觸過移植方面的工作,所以這些就不是本系列文章所要**的內容。ace從功能上大致分為如下幾個方面

ace os 層封裝了平台相關的函式和定義,例如 ace_os::strlen,ace_os::closesocket 等,這些封裝的意義在於使ace做到與平台無關,乙個比較好的例子是 socket 的定義,在 linux 上為 int 型別,在 windows 上為 socket 型別,而ace的 socket 定義是 ace_hanlde,它在不同的平台有不同的解釋。ace os 層是所有 ace 其他功能的基礎。

這個層提供了一系列的c++類封裝平台相關的結構,乙個比較好的例子是 ace_inet_addr,它封裝了 sockaddr 結構,提供了諸如 get_port、get_host_name 等方法來使相關的操作更加容易。

作業系統物件例如 記憶體檔案對映、執行緒、鎖等,ace 通過相應的類來提供對這些作業系統物件的封裝

對於每乙個作業系統,都會有數種不同的網路程式設計模式,他們有的高效、有的易於編寫,但總的來說,伺服器的程式設計基本上可以劃分成反應式(reactor)和前攝式(proactor)兩種,反射式一般是基於同步的操作,前攝式一般基於非同步的操作,ace 提供了 ace_reactor 類和 ace_proactor 類封裝了這兩大類的程式設計模式,在大類下,又通過類繼承提供了更加詳細的實現。

ace 通過 ace_service_config 提供了伺服器的配置功能。

例如,ace 提供了諸如 ace_message_block、ace_message_queue 等類封裝了讀寫的快取操作。

如同我從dos轉到windows程式設計的時候找不到可以開始寫**的地方一樣,ace 也需要開發人員進行一定的學習,ace的使用者了解它為開發網路程式提供了哪些功能。根據我的理解,使用ace編寫網路程式,一般需要做如下的幾個工作:

理解 ace_service_config 框架,並根據該框架的要求編寫相關的類(這個工作實際上是比較機械的,大多數程式都差不多)

編寫自已的業務邏輯類,將其嵌入到使用的框架中(這是需要ace的使用者來編寫的,也就是開始寫**的地方),一般來說,我們的業務邏輯類總是從某個 ace 類派生過載相應的方法,或是作為某個 ace 派生類的成員。

ace 並不是乙個類似於 com 元件的功能類,這樣的元件提供某種功能,我們直接呼叫它的某個方法以完成我們自己的功能,ace 是乙個中介軟體,它只是讓我們的程式設計工作更加簡單,所以,要求ace的使用者必須了解 網路程式設計的方法,以 ace_proactor 框架為例,在windows下,它是基於完成埠的非同步讀寫的實現,如果不了解非同步程式設計的相關概念方法,就不能很好的使用這個框架。

在windows下程式設計,就不能不涉及到mfc,通過編譯時候的一些設定,ace可以與mfc相容,但是,將兩種風格迥異的類庫集合到一起,總是給人一種不倫不類的感覺,事實上,我在編寫 mfc 程式的時候,總是避免使用 stl 的相關類,ace 也是一樣,對於使用者介面的解決方法,我是建立乙個基於mfc的介面程式,它通過socket與基於ace的伺服器連線,進行相關的設定,而基於ace的伺服器程式,總是乙個控制台的程式或者是乙個 service 程式,這樣,程式設計的工作會有比較大的簡化。

ACE之(一)ACE概述

1 軟體模式分為3類 架構模式 設計模式 慣用法。2 模式貫穿了軟體開發流程的幾個關鍵階段 系統分析 分析模式 著重於如何關注需求表面的額問題及蘊含的實質。系統設計 架構模式 規定了乙個系統的結構特徵及子系統的體系結構。模組設計實現 設計模式 描述了通訊元件的一種通用的 可重用的結構,用於解決特定環...

ACE筆記(1) ACE檔案操作

ace裡的檔案操作與平常的win32裡面的檔案操作有所不同,這是因為ace是為網路開發而設計的,裡面普遍都遵循了client server模式,這樣在操作檔案時,ace把檔案看做是乙個socket伺服器,而進行檔案操作的類 ace file io 被看做是乙個socket client。有了上面的認...

ACE學習筆記

ace的socket包裝類 ace sock connector include ace sock connector.h 連線 ace sock acceptor include ace sock acceptor.h 用於監聽 ace sock stream include ace sock s...