完成 C 實現了數百萬個併發 Reactor 伺服器,從 0

Mondo 科技 更新 2024-03-08

C++ 實現了數百萬個併發反應堆伺服器,從 0.

下|種植 uri":

在網路程式設計中有很多必須了解的基本概念,如OSI、TCP IP、位元組序列等,這些都是開發網路應用的基礎,可以幫助我們更好地理解網路程式的工作原理,一起學習一些重要的概念。

osiopen system interconnection)由國際標準化組織 (ISO) 開發。計算機互聯標準是設計和描述計算機網路通訊的基本框架。OSI 模型將網路通訊分為 7 層:沒有表示層的 TCP IP 協議和會話層,每層對應的 OSI 協議主要如下:

應用層:TFTP、HTTP、FTP等

傳輸層:TCP、UDP

網路層:IP、IGMP等

資料層:MTU等

物理層:ISO 2110、IEEE802等

TCP IP包含很多協議,如TCP、UDP、IP、HTTP、FTP等,這些協議在網際網絡上很常用,一些概念必須了解

傳輸控制協議(TCP):傳輸控制協議

UDP(User Datagram Protocol):使用者資料報協議

網際網路協議(IP):一種網路間協議

超文字傳輸協議 (HTTP):超文字傳輸協議

FTP(檔案傳輸協議):一種文字傳輸協議。

在我改進網路IO模型之前,我先問乙個問題,你知道單台伺服器可以連線多少個客戶端的理論嗎?

相信您知道 TCP 連線是由四重奏唯一確認的,而該四重是:本地 IP、本地埠、對等 IP、對等埠

作為服務提供商,伺服器通常在本地偵聽埠並等待客戶端連線。 因此,伺服器的本地 IP 和埠是固定的,因此對於伺服器端 TCP 連線的四倍,只有對等 IP 和埠會發生變化最大 TCP 連線數 = 客戶端 IP 數 客戶端埠數

對於 IPv4,客戶端上的 IP 數最多為 2 的 32 次方,客戶端上的埠數最多為 2 的 16 次方,即單個伺服器上的最大 TCP 連線數約為 2 的 48 次方

這個理論值已經相當“滿”了,但伺服器肯定承載不了那麼多連線,會受到兩個主要方面的限制:

檔案描述符,套接字實際上是乙個檔案,對應乙個檔案描述符。 在Linux下,單個程序可以開啟的檔案描述符數量是有限制的,未修改的值一般是1024,但是我們可以按ulimit增加檔案描述符的數量;

系統記憶體每個TCP連線在核心中都有對應的資料結構,這意味著每個連線都會占用一定的記憶體量;

如果伺服器只有 2 GB 記憶體,網絡卡是千兆位,它能支援 10,000 個併發請求嗎?

併發 10,000 個請求是經典的 C10k 問題,其中 C 是 Client 的首字母縮寫,C10K 是一台機器同時處理 10,000 個請求的問題。

從硬體資源的角度來看,對於一台擁有2GB記憶體千兆網絡卡的伺服器來說,如果每個請求處理占用的記憶體和網路頻寬小於200KB,則可以滿足10000個併發請求。

相關問題答案

    基於 MK.com 的 0 到 1 手寫 Linux 的高效能網路程式設計框架

    基於C 的手寫Linux高效能網路程式設計框架,從到 夏栽 sisuoit.com .html Linux 是當今最流行的開源作業系統之一,具有複雜而強大的核心。從頭開始手寫 Linux 系統是一項極具挑戰性的任務,但也是學習和探索作業系統原理的絕佳機會。在本文中,我們將介紹如何使用 C 從頭開始構...