Skip to content

Commit

Permalink
Use TW terminology for the TW document (#601)
Browse files Browse the repository at this point in the history
  • Loading branch information
marty1885 committed Oct 6, 2020
1 parent de0d793 commit fb7d73b
Showing 1 changed file with 38 additions and 38 deletions.
76 changes: 38 additions & 38 deletions README.zh-TW.md
Expand Up @@ -8,39 +8,39 @@

[English](./README.md) | [简体中文](./README.zh-CN.md) | 繁體中文

**Drogon**是一個基於C++14/17的Http應用框架,使用Drogon可以方便的使用C++構建各種類型的Web應用服務端程序
本版本庫是github上[Drogon工程](https://github.com/an-tao/drogon)的鏡像庫。 **Drogon**是作者非常喜歡的美劇《權力的遊戲》中的一條龍的名字(漢譯作卓耿),和龍有關但並不是dragon的誤寫,為了不至於引起不必要的誤會這裡說明一下。

Drogon是一個跨平台框架,它支持Linux,也支持macOS、FreeBSD,和Windows。它的主要特點如下:

* 網絡層使用基於epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高並發、高性能的網絡IO。詳細請見[TFB Tests Results](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite)
* 全異步編程模式
* 支持Http1.0/1.1(server端和client端);
* 基於template實現了簡單的反射機制,使主程序框架、控制器(controller)和視圖(view)完全解耦
* 支持cookies和內建的session
* 支持後端渲染,把控制器生成的數據交給視圖生成Html頁面,視圖由CSP模板文件描述,通過CSP標籤把C++代碼嵌入到Html頁面,由drogon的命令行工具在編譯階段自動生成C++代碼並編譯
* 支持運行期的視圖頁面動態加載(動態編譯和加載so文件);
**Drogon**是一個基於C++14/17的Http應用框架,使用Drogon可以方便的使用C++構建各種類型的Web App伺服器程式
本版本庫是github上[Drogon](https://github.com/an-tao/drogon)的鏡像庫。 **Drogon**是作者非常喜歡的美劇《冰與火之歌:權力遊戲》中的一條龍的名字(漢譯作卓耿),和龍有關但並不是dragon的誤寫,為了不至於引起不必要的誤會這裡說明一下。

Drogon是一個跨平台框架,它支援Linux,也支援macOS、FreeBSD和Windows。它的主要特點如下:

* 網路層使用基於epoll(macOS/FreeBSD下是kqueue)的非阻塞IO框架,提供高並發、高性能的網路IO。詳細請見[TFB Tests Results](https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=composite)
* 全異步程式設計
* 支援Http1.0/1.1(server端和client端);
* 基於模板(template)實現了簡單的反射機制,使主程式框架、控制器(controller)和視圖(view)完全去耦
* 支援cookies和內建的session
* 支援後端渲染,把控制器生成的數據交給視圖生成Html頁面,視圖由CSP模板文件描述,通過CSP標籤把C++程式碼嵌入到Html頁面,由drogon的指令列工具在編譯階段自動生成C++程式碼並編譯
* 支援運行期的視圖頁面動態加載(動態編譯和載入so文件);
* 非常方便靈活的路徑(path)到控制器處理函數(handler)的映射方案;
* 支持過濾器(filter)鏈,方便在控制器之前執行統一的邏輯(如登錄驗證、Http Method約束驗證等);
* 支持https(基於OpenSSL實現);
* 支持websocket(server端和client端);
* 支持Json格式請求和應答, 對Restful API應用開發非常友好;
* 支持文件下載和上傳,支持sendfile系統調用
* 支持gzip/brotli壓縮傳輸;
* 支持pipelining
* 提供一個輕量的命令行工具drogon_ctl,幫助簡化各種類的創建和視圖代碼的生成過程
* 基於非阻塞IO實現的異步數據庫讀寫,目前支持PostgreSQL和MySQL(MariaDB)數據庫
* 基於線程池實現sqlite3數據庫的異步讀寫,提供與上文數據庫相同的接口
* 支持ARM架構
* 方便的輕量級ORM實現,支持常規的對像到數據庫的雙向映射操作
* 支持插件,可通過配置文件在加載期動態拆裝
* 支持內建插入點的AOP
* 支援過濾器(filter)鏈,方便在控制器之前執行統一的邏輯(如登錄驗證、Http Method約束驗證等);
* 支援https(基於OpenSSL);
* 支援websocket(server端和client端);
* 支援Json格式的請求和回應, 方便開發Restful API;
* 支援文件下載和上傳,支援sendfile系統呼叫
* 支援gzip/brotli壓縮傳輸;
* 支援pipelining
* 提供一個輕量的指令列工具drogon_ctl,幫助簡化各種類的創造和視圖程式碼的生成過程
* 非同步的讀寫資料庫,目前支援PostgreSQL和MySQL(MariaDB)資料庫
* 基於執行序池實現sqlite3資料庫的異步讀寫,提供與上文資料庫相同的接口
* 支援ARM架構
* 方便的輕量級ORM實現,一般物件到資料庫的雙向映射
* 支援外掛,可通過設定文件在載入時動態載入
* 支援內建插入點的AOP

## 一個非常簡單的例子

不像大多數C++框架那樣,drogon的主程序可以保持非常簡單。 Drogon使用了一些小技巧使主程序和控制器解耦合. 控制器的路由設置可以在控制器類中定義或者配置文件中完成.
不像大多數C++框架那樣,drogon的主程式可以非常簡單。 Drogon使用了一些小技巧使主程式和控制器去耦. 控制器的路由設定可以在控制器類別中定義或者設定文件中完成.

下面是一個典型的主程序的樣子:
下面是一個典型的主程式的樣子:

```c++
#include <drogon/drogon.h>
Expand All @@ -56,7 +56,7 @@ int main()
}
```

如果使用配置文件,可以進一步簡化成如下的樣子:
如果使用設定文件,可以進一步簡化成這樣:

```c++
#include <drogon/drogon.h>
Expand All @@ -67,7 +67,7 @@ int main()
}
```

當然,Drogon也提供了一些接口,使用戶可以在main()函數中直接添​​加控制器邏輯,比如,用戶可以註冊一個lambda處理器到drogon框架中,如下所示:
當然,Drogon也提供了一些函數,使使用者可以在main()函數中直接添​​加控制器邏輯,比如,使用者可以註冊一個lambda處理器到drogon框架中,如下所示:

```c++
app().registerHandler("/test?username={name}",
Expand All @@ -85,7 +85,7 @@ app().registerHandler("/test?username={name}",
```
這看起來是很方便,但是這並不適用於復雜的應用,試想假如有數十個或者數百個處理函數要註冊進框架,main()函數將膨脹到不可讀的程度。顯然,讓每個包含處理函數的類在自己的定義中完成註冊是更好的選擇。所以,除非你的應用邏輯非常簡單,我們不推薦使用上述接口,更好的實踐是,我們可以創建一個HttpSimpleController對象,如下:
這看起來是很方便,但是這並不適用於復雜的場景,試想假如有數十個或者數百個處理函數要註冊進框架,main()函數將膨脹到不可讀的程度。顯然,讓每個包含處理函數的類在自己的定義中完成註冊是更好的選擇。所以,除非你的應用邏輯非常簡單,我們不推薦使用上述接口,更好的實踐是,我們可以創造一個HttpSimpleController類別,如下:
```c++
Expand Down Expand Up @@ -115,9 +115,9 @@ void TestCtrl::asyncHandleHttpRequest(const HttpRequestPtr& req,
}
```

**上面程序的大部分代碼都可以由`drogon_ctl`命令創建**這個命令是`drogon_ctl create controller TestCtr`)。用戶所需做的就是添加自己的業務邏輯。在這個例子中,當客戶端訪問URL`http://ip/test`時,控制器簡單的返回了一個`Hello, world!`頁面。
**上面程式的大部分程式碼都可以由`drogon_ctl`指令創造**這個指令是`drogon_ctl create controller TestCtr`)。使用者所需做的就是添加自己的業務邏輯。在這個例子中,當客戶端訪問URL`http://ip/test`時,控制器簡單的回傳了一個`Hello, world!`頁面。

對於JSON格式的響應,我們可以像下面這樣創建控制器
對於JSON格式的回應,我們可以像下面這樣創造控制器

```c++
/// The header file
Expand Down Expand Up @@ -146,7 +146,7 @@ void JsonCtrl::asyncHandleHttpRequest(const HttpRequestPtr &req,
}
```
讓我們更進一步,通過HttpController類創建一個RESTful API的例子,如下所示(忽略了實現文件):
讓我們更進一步,通過HttpController類別創造一個RESTful API的例子,如下所示(忽略了實做文件):
```c++
/// The header file
Expand Down Expand Up @@ -180,16 +180,16 @@ class User : public drogon::HttpController<User>
} // namespace api
```

如你所見,通過`HttpController`類,用戶可以同時映射路徑和路徑參數,這對RESTful API應用來說非常方便。
如你所見,通過`HttpController`類別,使用者可以同時映射路徑和路徑參數,這對RESTful API應用來說非常方便。

另外,你可以發現前面所有的處理函數接口都是異步的,處理器的響應是通過回調對象返回的。這種設計是出於對高性能的考慮,因為在異步模式下,可以使用少量的線程(比如和處理器核心數相等的線程)處理大量的並發請求。
另外,你可以發現前面所有的處理函數接口都是異步的,處理器的回應是通過回調對象回傳的。這種設計是出於對高性能的考慮,因為在異步模式下,可以使用少量的執行序(比如和處理器核心數相等的執行序)處理大量的並發請求。

編譯上述的所有源文件後,我們得到了一個非常簡單的web應用程序,這是一個不錯的開始。 **請訪問[wiki](https://github.com/an-tao/drogon/wiki/CHN-01-概述)或者[doxiz](https://doxiz.com/drogon/master/overview/)以獲取更多的信息**
編譯上述的所有源文件後,我們得到了一個非常簡單的web應用程式,這是一個不錯的開始。 **請瀏覽[wiki](https://github.com/an-tao/drogon/wiki/CHN-01-概述)或者[doxiz](https://doxiz.com/drogon/master/overview/)以獲取更多的信息**

## 貢獻方式

歡迎您的貢獻。請閱讀[貢獻指南](CONTRIBUTING.md)以獲取更多的信息。

## QQ交流群:1137909452

歡迎交流探討。
歡迎交流探討。

0 comments on commit fb7d73b

Please sign in to comment.