技術一直在發展,數據也在發展,因此它的存儲和管理方法也在發展。大多數人不會關心一臺服務器如何一次處理多個連接,或者它如何真正處理大量網絡流量。他們可能很好奇,但不會獲得大部分技術術語。然而,在科技界,了解這一點很重要。首先,這將幫助您提高知識水平。其次,它會讓您在準備軟件甚至測試軟件時了解“最新消息”。有無數的應用程序在服務器上運行。人們無法想象處理這一切的那些(服務器管理員)的壓力有多大。一個正確的策略是必須的,否則它可能會帶來災難,也許是關鍵數據和/或財務的丟失。
一臺服務器如何處理多個連接?
這是一個常見且令人難以置信的問題,即 – 一臺服務器如何處理多個連接?假設多個客戶端同時連接到端口 80。這意味著“連接”實際上代表了一個包,它包含一個包含目標端口的頭字段,在這種情況下是 80。還有許多其他端口具有不同的序列號以供識別。多個客戶端可能連接到同一個端口,具體取決于哪個客戶端分配了哪個端口。插座表示確切的終點。
很明顯,每個客戶端的IP地址肯定會有所不同,服務器的IP地址也是如此。端口僅用于一般的源和目標目的,因此將允許多??個連接,而這些連接又將被轉移到它們應該到達的確切服務器。
一個人還需要記住規則。套接字由語法識別 - {SRC-IP, SRC-PORT, DEST-IP, DEST-PORT, PROTOCOL}。請注意,提及協議很重要。因此,如果兩個客戶端嘗試使用同一個端口連接,那么根據規則,它將是 – socket1{SRC-A, 100, DEST-X, 80, TCP} 和 socket2{SRC-B, 100, DEST-X, 80、TCP}。總結一下這個特殊情況,主機 A 通過端口 80 與服務器 X 聯系,主機 B 也通過相同的端口與同一臺服務器聯系。這些客戶端的 IP 地址當然是不同的。
現在服務器將決定應該優先考慮哪個套接字。如果單個服務器正在偵聽同一端口,則可能有多個套接字連接,這些套接字可以來自相同或不同的客戶端。只要該服務器知道哪個請求來自何處(通過套接字),它就可以使用相同的套接字響應相應的客戶端。它不需要在自己的節點中打開另一個端口,但可以使用客戶端最初嘗試連接的原始端口。事實上,它應該使用相同的初始套接字進行響應,以免浪費資源。
一個服務器的兩個不同進程可能監聽同一個端口,前提是它們都使用不同的協議;否則是不可能的。服務器也被歸類為單和多線程。
如果一臺服務器使用單個子進程來為所有套接字提供服務,則它被稱為單線程服務器。如果服務器使用多個子進程來通過將每個套接字分配給一個子進程來服務多個請求,那么它被稱為多線程服務器。這是服務器一次處理多個連接的方式。
人們不應該假設如果提到這兩個過程,那么它們之間一定存在某種父子關系。通常,操作系統允許子進程繼承父進程的所有內容。因此,如果一個進程(比如)A 正在偵聽多個套接字,那么其他(子)進程如 A1、A2……也可以偵聽,但不能偵聽另一個完全不相關的進程 B。兩個或多個不同的進程不能偵聽由操作系統管理的同一個套接字。如果操作系統不遵循這一點,那么它將被稱為違反現有規則。