初步認識迭代伺服器和併發伺服器

2021-06-22 05:35:33 字數 674 閱讀 3094

迭代伺服器比較原始,它的原型可以描述成:

while(1)

也就是說,這個程序是乙個乙個處理各個客戶端發來的連線的,比如乙個客戶端發來乙個連線,那麼只要它還沒有完成自己的任務,那麼它就一直會占用伺服器的程序直到處理完畢後伺服器關閉掉這個socket。

併發伺服器是最經常用的:

1 while(1)

2 11 關閉new_fd

12 }

這樣每來乙個客戶端,伺服器就轉殖乙個自己去處理請求,這樣主程序就一直處於監聽狀態而不會被阻塞

額,我想講的重點不是這裡,重點是**第12行!

1。千萬不要以為fork出來乙個子程序就產生了2個新的socket描述符,實際上子程序和父程序是共享linten_fd和new_fd的,當父程序關閉new_fd的時候(**第12行)它只是把這個new_fd的訪問計數值減了1而已,由於訪問計數值還 > 0(因為還有客戶端的new_fd連著呢),所以它並沒有斷開和客戶端的連線。

2。如果我們不寫第12行會有什麼後果,第一,因為可分配的socket描述符是有限的,如果分配了以後不釋放,也就是不能**再利用,也就是總有描述符耗盡的一天。第二,本來把和客戶端連線的任務交給子程序以後父程序就可以繼續監聽並accept下個連線了,但如果父程序不關閉自己跟客戶的連線,意思就是這個連線居然永遠存在!相當於每來乙個客戶這個父程序就連乙個客戶並且連線不斷,你應該知道後果了吧。

初步認識迭代伺服器和併發伺服器

迭代伺服器比較原始,它的原型可以描述成 while 1 也就是說,這個程序是乙個乙個處理各個客戶端發來的連線的,比如乙個客戶端發來乙個連線,那麼只要它還沒有完成自己的任務,那麼它就一直會占用伺服器的程序直到處理完畢後伺服器關閉掉這個socket。併發伺服器是最經常用的 1 while 1 2 11 ...

初步認識迭代伺服器和併發伺服器

迭代伺服器比較原始,它的原型可以描述成 也就是說,這個程序是乙個乙個處理各個客戶端發來的連線的,比如乙個客戶端發來乙個連線,那麼只要它還沒有完成自己的任務,那麼它就一直會占用伺服器的程序直到處理完畢後伺服器關閉掉這個socket。併發伺服器是最經常用的 1 while 1 2 11 關閉new fd...

初步認識迭代伺服器和併發伺服器

迭代伺服器比較原始,它的原型可以描述成 while 1 也就是說,這個程序是乙個乙個處理各個客戶端發來的連線的,比如乙個客戶端發來乙個連線,那麼只要它還沒有完成自己的任務,那麼它就一直會占用伺服器的程序直到處理完畢後伺服器關閉掉這個socket。併發伺服器是最經常用的 1 while 1 2 11 ...