第八篇:併發回射伺服器的最基本實現思路

穆晨發表於2017-01-29

前言

       一個伺服器,通常會在一段時間內接收到多個請求。如果非要等到處理完一個請求再去處理下一個,勢必會造成大部分使用者的不滿( 尤其當有某個請求需要佔用大量時間時 )。

       如何解決這個問題?讓處理這些使用者請求的程式併發起來吧!

實現方法

       方法一:當客戶請求到達,伺服器程式建立一個自身副本( 呼叫fork函式 )。這是網路伺服器的經典用法。

       方法二:當客戶請求到達,伺服器程式建立一個自身副本( 呼叫fork函式 ),然後用本機內的另一個程式替換自身( 呼叫execve函式 )。

       注:fork和execve函式均包含於 unistd.h 標頭檔案中

方法一例項程式碼

 1 /*
 2  * 僅展示處理客戶請求那部分的程式碼模組
 3 */
 4 while (1) {
 5     // 接收客戶訊號
 6     connfd = accept(listenfd, ...);
 7     // 當該程式為子程式時,... ...( 注意如果是父程式執行則會建立一個子程式 )
 8     if ( (pid = fork() ) == 0 ) {
 9         // 關閉子程式自身的監聽套接字
10         close(listenfd);
11         // 子程式響應客戶
12         doit(connfd);
13         // 關閉子程式的連線套接字
14         close(connfd);
15         // 關閉子程式
16         exit(0);
17     }
18     // 關閉父程式的連線套接字
19     close(connfd);
20 }

方法二例項程式碼

       暫時沒有發現,留待日後補充。

相關文章