Boost.Asio翻譯

最近在寫自己的小應用的時候,開始涉及到boost.asio,之前在項目中也沒有系統性的學習過。於是,趁着這個時間好好學習一下。

最好的入門資料當然是boost的官方文檔,將幾篇翻譯的文檔放在下邊。

聲明,我當然不會投入巨大的精力翻譯這樣的文檔,從某種嚴格意義上來講,我是在必應或者谷歌提供的翻譯基礎上做了一些校對,使句子不那麼顯得機器。

Boost.asio

理由(Rationale)

大多數程序以某種方式與外部世界交互,無論是通過文件、網絡、串行電纜還是控制檯。有時,與網絡一樣,單個 I/O 操作可能需要很長時間才能完成。這給應用程序開發帶來了特殊挑戰。

Boost.Asio 提供了管理這些長時間運行操作的工具,無需程序使用基於線程和顯式鎖定的併發模型。

Boost.Asio 庫專爲使用C++進行系統編程的程序員而使用,通常需要訪問操作系統功能(如網絡)。特別是,Boost.Asio 解決了以下目標:

  • 可移植性。庫應支持一系列常用的操作系統,並在整個操作系統中提供一致的行爲。
  • 可伸縮性。庫應促進擴展到數千個併發連接的網絡應用程序的開發。爲每個操作系統的庫實現應使用最能啓用此可伸縮性的機制。
  • 效率。庫應支持分散收集 I/O 等技術,並允許程序將數據複製降至最低。
  • 從已建立的API(如BSD套接字)建模概念。BSD套接字API被廣泛實施和理解,幷包含在許多文獻中。其他編程語言通常使用類似的接口構建網絡API。就合理性而言,Boost.Asio利用了現有的實踐。
  • 易用性。庫應採用工具包(而不是框架)方法,爲新用戶提供較低的進入門檻。也就是說,它應該儘量減少前期投資的學習時間,只需要學習一些基本的規則和準則。之後,庫用戶只需瞭解正在使用的特定函數。
  • 進一步抽象的基礎。庫應允許開發提供更高抽象級別的其他庫。例如,常見協議(如 HTTP)的實現。

儘管 Boost.Asio 開始主要關注網絡,但其異步 I/O 概念已擴展至包括其他操作系統資源,如串行端口、文件描述符等。

note: 這是一篇介紹爲什麼寫boost.asio以及boost.asio遵循的幾個規則或者說信條。


核心概念和功能(Core Concepts and Functionality)

Boost.Asio基本原理(Basic Boost.Asio Anatomy)

Boost.Asio可用於對I/O對象(如套接字)執行同步和異步操作。在使用Boost.Asio 之前,瞭解 Boost.Asio、您的程序以及它們如何協同工作的概念圖片可能很有用。

作爲介紹性示例,讓我們考慮在套接字上執行連接操作時會發生什麼情況。我們將首先檢查同步操作。

圖有點老,新版本的boost已經用io_context取代io_service

你的程序將至少有一個io_context對象。io_context代表你的程序指向操作系統的 I/O 服務的鏈接。

boost::asio::io_context io_context;

要執行 I/O 操作,程序將需要 I/O 對象(如 TCP 套接字):

boost::asio::ip::tcp::socket socket(io_context);

執行同步連接操作時,將發生以下事件序列:

  1. 程序通過調用 I/O 對象啓動連接操作:
socket.connect(server_endpoint);
  1. I/O 對象將請求轉發到io_context。
  2. io_context調用操作系統以執行連接操作。
  3. 操作系統將操作結果返回給io_context。
  4. io_context將操作所產生的任何錯誤轉換爲boost::system::error_code類型的error_code對象。error_code可以與特定值進行比較,也可以測試爲布爾(如果是false意味着沒有發生錯誤)。然後,結果將轉發回 I/O 對象。
  5. 如果操作失敗,I/O 對象將引發boost::system::error_code的異常。如果啓動操作的代碼已編寫爲:
boost::system::error_code ec;
socket.connect(server_endpoint, ec);

然後,error_code變量 ec 將設置爲操作的結果,並且不會引發異常。

使用異步操作時,將發生不同的事件序列。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章