原创 17. IO複用之epoll觸發模式

epoll有兩種觸發模式 : 水平觸發和邊沿觸發. 默認爲水平觸發模式. 水平觸發 什麼叫做水平觸發呢? IO大都有緩衝區, 當緩衝區裏面只要有數據時就會觸發水平模式,直到將緩衝的數據讀寫結束纔不會觸發水平模式. 舉個栗子 :

原创 16.IO複用之epoll函數

前面介紹了select函數和poll函數, select我們知道能夠支持的套接字個數太少了, 但是poll函數已經很好了也沒有什麼缺點啊爲啥還要介紹epoll呢? 接下來我們就來談談poll和select函數的其他問題. po

原创 45. connect 實現定時

我們需要先連接 getaddrinfo, 而 getaddrinfo 的特性實在太多, 本節也僅僅只是簡單的做一個小結, 如果想要了解更加全面可以參考 unp 第245頁. getaddrinfo 函數 getaddrinfo

原创 43. TCP套接字之connect非阻塞

本節來將客戶端的connect阻塞式改爲非阻塞式. 這樣可以同時向服務端發起多個連接並一起進行處理, 非阻塞connect一般用來測試服務端的抗壓能力. connect 非阻塞用途 connect設置爲非阻塞之後會立即返回 設

原创 41. 非阻塞IO

前面我們所使用的IO都是阻塞式的, 當然, 默認也是阻塞式的. 不過我們也可以設置文件描述符將阻塞式變爲非阻塞式. 我們爲什麼會將阻塞式轉爲非阻塞式呢? 肯定是有好處的, 而本節就先簡單介紹一下關於非阻塞式. 阻塞式 先來了解

原创 0. 網絡編程目錄

至今已經在第二次寫網絡編程的博客了, 去年將網絡分析和系統編程一起進行整理的, 而且沒有對每一個知識點進行歸納和總結. 前段時間還是又回顧了TCP編程的一點基礎, 爲了以後回顧還有學習網絡編程的看到寫的博客後能夠成系列的來學習,

原创 記一則shadowsocks問題

背時, 前幾天因爲想在服務器上安裝某軟件搭建自己的博客, 結果導致自己的shadowsocks突然間不能作用. 其實故障的原因很大就是軟件導致的, 但讓室友幫忙查看網頁是否能夠訪問時卻又發現默認網頁似乎也不能訪問了甚至連該軟件提

原创 47. web 客戶程序

前面鋪墊了非阻塞 connect 以及 HTTP 請求, 本節就已 unp 書上的例子實現一個簡單的 web 客戶端程序. 客戶程序 使用非阻塞式connect 保證同時能建立多個 TCP 連接. 如果使用阻塞式 connect,

原创 51. 線程-服務端

在最開始實現併發服務端的時候, 最開始想到的辦法便是使用多進程, 使每個 TCP 連接對應一個進程; 之後我們又將多進程併發改寫成了 IO 複用的方式實現了相同的功能; 但現在唯一沒有將服務端改寫成線程, 本節就來改寫服務端. 線

原创 gdb 多線程和多進程調試

多進程調試 info inferiors : 顯示當前的多進程信息. 前面有 * 表示當前調試的進程 inferiors num : 指定當前調試的進程. num表示當前跳轉到調試的進程番號. 如果要調試子進程的話,

原创 48. 半同步/半異步

本節說到的半同步與半異步跟同步和異步並不是一個概念, 請不要混淆了. 也爲了避免混淆, 下面也會對同步和異步做一個簡要的說明. 同步/異步 同步和異步是屬於IO模型中, 前面已經對IO模型有過接觸了( 如 非阻塞IO[1]).

原创 52. 線程-IO複用(EPOLLONESHOT)

線程怎麼與IO複用聯繫起來, IO複用中創建線程? 還是線程中IO複用? 這個問題用在進程也是一樣的. 其實兩種方式都可以. 本節採用在 IO複用中創建線程, 接下來就來看看具體怎麼實現的吧. epoll 的EPOLLONES

原创 49. HTTP 請求/應答

HTTP 協議是 Hyper Text Transfer Protocol (超文本傳輸協議) 縮寫, 並且是基於 TCP/IP 通信協議來傳遞數據. HTTP 協議特點 無連接 : 每次進行一次 HTTP 通信. 服務器處理完

原创 46. 域名解析

前面我們使用的所有客戶端建立連接都是在知道對方的 IP 地址基礎上進行的. 但是如果我們需要使用前面的客戶端程序與網頁建立連接難不成還要記住該網頁的 IP 不成? 當然. 有過網絡基礎上肯定知道 DNS域名服務器. 該類域名系統通過

原创 50. 進程池

一般進程池和線程池都是併發編程中常見的, 如nginx採用進程池, 也有實現協程降低上下文切換的代價等等, 使用和實現這些方法都是爲了提高我們服務端的併發能力. 進程池和線程池都是避免服務端頻繁的創建進程(線程), 畢竟創建進