目前大家所用的大多是X86服務器,其功能完善、運行速度快、軟件支持性好等優點,已被人們普遍認同。但隨著互連網的發展,我們需要更多的小型服務器終端,因此,低成本、低功耗的嵌入式服務器將有極大的應用空間。那么粵嵌重慶嵌入式Linux培訓解析一下并發服務器原理及框架。
基本的C/S服務模型。相互通信的網絡程序通常可以分為客戶端和服務器端兩部分。簡單的C/S服務模式客戶端和服務器采用的是一對一的關系,而實際上一個客戶同時可以與多個服務器通信,一個服務器同時也能與多個客戶通信。Linux下使用TCP套接字編程可以實現基于TCP/IP協議的面向連接的通信,它分為服務器端和客戶端兩部分。
服務器端與客戶端連接的步驟如下:使用socket函數創建套接字;將創那的套接字綁定到指定的地址結構;Listen函數設置套接字為監聽模式,使服務器進入被動打開的狀態;接受客戶端的連接請求,建立連接;終止連接。
客戶端實現步驟如下: 使用socket函數創建套接字;調用connect函數建立一個TCP服務器的連接;發送數據請求,接收服務器的數據應答;終止連接。這樣就建立了簡單的C/S連接模式,而所有基于TCP套接字的網絡服務也都是建立在這個基礎上的。
多進程并發服務器模型。其中服務器每次只能處理一個客戶的請求,它的實現雖然很簡單但效率卻很低,在實際應用中,這樣的服務器是不能滿足實際需求的。在實際應用中為了讓一個服務器同時為多個客戶服務,處理多個客戶的請求,那么就需要用并發服務器。
Linux下主要支持的并發服務器有進程、線程。創建線程要比進程快,但一個進程內的所有線程共享相同的內存空間、全局變量等信息,所以當一個線程崩潰時,它會影響同一進程中的其他線程。Linux系統中可以同時存在多個進程,但相對線程來說,進程是獨立的。它擁有獨立的地址空間、執行堆棧、文件描述符等,在未經允許的情況下,一個進程不能訪問另一個進程的資源,因此一個進程崩潰不會造成其他進程的崩潰。
多進程服務器原理。在多進程并發服務器中是通過調用fork或vfork函數來創建新進程。當父進程產生新的子進程后,父、子進程共享父進程在調用fork之前的所有描述符。接下來父進程只負責接收客戶請求,而子進程只負責處理客戶請求。
對于粵嵌重慶嵌入式Linux培訓所講的并發服務器原理及框架,相信大家也了解了。這種低成本、低噪聲、低功耗、高穩定性、高安全性的嵌入式服務器,將在我們信息化發展中的智能樓宇、智能家電、智能移動設備中獲得應用。