開篇序:
今天開始網(wǎng)絡(luò)編程的修仙之路。首先簡(jiǎn)單的聊聊如何學(xué)習(xí)網(wǎng)絡(luò)編程壹甥,換句話講救巷,網(wǎng)絡(luò)編程應(yīng)該掌握哪些知識(shí)。
第一部分:協(xié)議
舉個(gè)例子句柠,HTTP浦译,TCP棒假,UDP等等。人與人交流需要規(guī)則精盅,所以人類發(fā)明了語(yǔ)言帽哑。同樣,機(jī)器與機(jī)器交流叹俏,也需要制定規(guī)則妻枕,則這種規(guī)則被稱為協(xié)議。我們通常說(shuō)的網(wǎng)絡(luò)編程粘驰,大部分情況都是在基于TCP/UDP協(xié)議進(jìn)行編寫的屡谐。
一個(gè)好的協(xié)議的設(shè)計(jì),會(huì)大大提升網(wǎng)絡(luò)傳輸?shù)姆€(wěn)定性以及性能等各個(gè)方面愕掏。舉個(gè)例子顶伞,TCP在擁塞控制以及流量控制這一塊處理的相當(dāng)精妙饵撑,我們就可以學(xué)習(xí)TCP協(xié)議設(shè)計(jì)上的一些優(yōu)點(diǎn)唆貌,來(lái)進(jìn)行自定義協(xié)議的設(shè)計(jì)滑潘。
小編強(qiáng)烈推薦一本書,【TCP/IP詳解 卷一】Stevens大神寫的挠锥,非常硬核。
第二部分:UNIX套接字API
現(xiàn)在絕大多數(shù)服務(wù)器是跑在linux上蓖租。所以我們要對(duì)UNIX套接字API進(jìn)行學(xué)習(xí)”突拢看到這兒齐婴,我相信有的同學(xué)可能會(huì)有這樣的疑惑:java不是跨平臺(tái)的么,java有netty框架稠茂,直接使用不就可以了么柠偶。但是要想成為真正的大佬睬关,光是會(huì)使用框架是不可以的,要深入的了解其底層原理电爹,了解是如何進(jìn)行系統(tǒng)調(diào)用,這樣才能使你更好地使用上層語(yǔ)言進(jìn)行網(wǎng)絡(luò)編程 或者 定位以及解決相應(yīng)的問(wèn)題摇邦。
話外語(yǔ):只會(huì)復(fù)制粘貼,而不去追求技術(shù)本質(zhì)的程序員是可悲的施籍。
推薦書籍:【UNIX網(wǎng)絡(luò)編程 卷一】Stevens大神寫的,但是對(duì)網(wǎng)絡(luò)并發(fā)編程描述的不是很詳細(xì)丑慎,可能是因?yàn)楫?dāng)時(shí)網(wǎng)絡(luò)服務(wù)器沒有太高的并發(fā)需求。
第三部分:IO模型以及多線程
UNIX網(wǎng)絡(luò)編程中夜惭,描述了五種IO模型铛绰,分別是:阻塞式IO产喉,非阻塞IO,IO復(fù)用曾沈,信息驅(qū)動(dòng)式IO以及異步IO。前四種都是同步IO姐帚。UNIX大名鼎鼎的SELECT障涯,POLL以及LINUX上的EPOLL模型都是IO復(fù)用模型。Linux上的aio以及windows上的IOCP都是異步唯蝶。但是Linux上的aio不能用于網(wǎng)絡(luò)編程九秀,但是Linux內(nèi)核5.1新出來(lái) io_uring 機(jī)制也是異步粘我,感興趣的小伙伴可以去了解一哈。
此時(shí)可能有很多小伙伴不清楚異步和同步 以及 阻塞和非阻塞的區(qū)別都弹,后續(xù)的文章會(huì)給大家具體分析匙姜。
當(dāng)你的并發(fā)量很大的時(shí)候,你就需要充分調(diào)用系統(tǒng)的資源去處理發(fā)過(guò)來(lái)的大量請(qǐng)求搁料。這是就要用到多線程方面的知識(shí)系羞。將IO復(fù)用模型加上多線程霸琴,就是以后要講到的reactor模型。
第四部分:高性能網(wǎng)絡(luò)框架
現(xiàn)在有很多高性能網(wǎng)絡(luò)框架誕生澎迎,并且開源选调。例如,java中的Netty仁堪,go中的Gnet等等。這些框架的源碼都極具學(xué)習(xí)意義鸟辅。我們要學(xué)習(xí)這些框架莺葫,了解其設(shè)計(jì)理念,從而增強(qiáng)自己對(duì)設(shè)計(jì)模式捺檬,IO模型,并發(fā)編程的認(rèn)知聂受。
我們不光要會(huì)使用輪子,也要去嘗試自己造一個(gè)輪子饺饭。在嘗試造輪子的過(guò)程中职车,你會(huì)對(duì)網(wǎng)絡(luò)編程的認(rèn)知逐漸加深。
推薦書籍:【netty實(shí)戰(zhàn)】
第五部分:操作系統(tǒng)扛芽,數(shù)據(jù)結(jié)構(gòu)
這些都是編程很基礎(chǔ)很重要的東西积瞒,需要不斷去學(xué)習(xí),鞏固自己的基礎(chǔ)茫孔。
推薦書籍:【現(xiàn)代操作系統(tǒng)】
總結(jié)
學(xué)習(xí)網(wǎng)絡(luò)通信是場(chǎng)“持久戰(zhàn)”被芳。需要一步一個(gè)腳印走下去馍悟,踏踏實(shí)實(shí),浮躁不得侵状,沉靜下去毅整,將技術(shù)磨煉到極致。致每一個(gè)奮斗者悼嫉,干杯!
路漫漫其修遠(yuǎn)兮,吾將上下而求索暴区,讓我們一起學(xué)習(xí)辛臊,一起進(jìn)步房交,Let’s Go彻舰!