前言
一個伺服器,通常會在一段時間內接收到多個請求。如果非要等到處理完一個請求再去處理下一個,勢必會造成大部分使用者的不滿( 尤其當有某個請求需要佔用大量時間時 )。
如何解決這個問題?讓處理這些使用者請求的程式併發起來吧!
實現方法
方法一:當客戶請求到達,伺服器程式建立一個自身副本( 呼叫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 }
方法二例項程式碼
暫時沒有發現,留待日後補充。