談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)

談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)

ID:9089377

大?。?7.00 KB

頁數(shù):22頁

時(shí)間:2018-04-17

談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)_第1頁
談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)_第2頁
談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)_第3頁
談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)_第4頁
談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)_第5頁
資源描述:

《談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)》由會(huì)員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在應(yīng)用文檔-天天文庫。

1、談一談網(wǎng)絡(luò)編程學(xué)習(xí)經(jīng)驗(yàn)作者:陳碩??來源:博客園??發(fā)布時(shí)間:2011-07-0516:07??閱讀:1842次??推薦:0??原文鏈接??[收藏]??本文談一談我在學(xué)習(xí)網(wǎng)絡(luò)編程方面的一些個(gè)人經(jīng)驗(yàn)?!熬W(wǎng)絡(luò)編程”這個(gè)術(shù)語的范圍很廣,本文指用SocketsAPI開發(fā)基于TCP/IP的網(wǎng)絡(luò)應(yīng)用程序,具體定義見“網(wǎng)絡(luò)編程的各種任務(wù)角色”一節(jié)。受限于本人的經(jīng)歷和經(jīng)驗(yàn),這篇文章的適應(yīng)范圍是:·x86-64Linux服務(wù)端網(wǎng)絡(luò)編程,直接或間接使用SocketsAPI·公司內(nèi)網(wǎng)。不一定是局域網(wǎng),但總體位于公司防火墻之內(nèi),環(huán)境

2、可控本文可能不適合:·PC客戶端網(wǎng)絡(luò)編程,程序運(yùn)行在客戶的PC上,環(huán)境多變且不可控·Windows網(wǎng)絡(luò)編程·面向公網(wǎng)的服務(wù)程序·高性能網(wǎng)絡(luò)服務(wù)器本文分兩個(gè)部分:1.網(wǎng)絡(luò)編程的一些胡思亂想,談?wù)勎覍?duì)這一領(lǐng)域的認(rèn)識(shí)2.幾本必看的書,基本上還是W.RichardStevents那幾本另外,本文沒有特別說明時(shí)均暗指TCP協(xié)議,“連接”是“TCP連接”,“服務(wù)端”是“TCP服務(wù)端”。網(wǎng)絡(luò)編程的一些胡思亂想以下胡亂列出我對(duì)網(wǎng)絡(luò)編程的一些想法,前后無關(guān)聯(lián)。網(wǎng)絡(luò)編程是什么?網(wǎng)絡(luò)編程是什么?是熟練使用SocketsAPI嗎?說

3、實(shí)話,在實(shí)際項(xiàng)目里我只用過兩次SocketsAPI,其他時(shí)候都是使用封裝好的網(wǎng)絡(luò)庫。第一次是2005年在學(xué)校做一個(gè)羽毛球賽場(chǎng)計(jì)分系統(tǒng):我用C#編寫運(yùn)行在PC機(jī)上的軟件,負(fù)責(zé)比分的顯示;再用C#寫了運(yùn)行在PDA上的計(jì)分界面,記分員拿著PDA記錄比分;這兩部分程序通過TCP協(xié)議相互通信。這其實(shí)是個(gè)簡(jiǎn)單的分布式系統(tǒng),體育館有不止一片場(chǎng)地,每個(gè)場(chǎng)地都有一名拿PDA的記分員,每個(gè)場(chǎng)地都有兩臺(tái)顯示比分的PC機(jī)(顯示器是42吋平板電視,放在場(chǎng)地的對(duì)角,這樣兩邊看臺(tái)的觀眾都能看到比分)。這兩臺(tái)PC機(jī)功能不完全一樣,一臺(tái)只負(fù)責(zé)

4、顯示當(dāng)前比分,另一臺(tái)還要負(fù)責(zé)與PDA通信,并更新數(shù)據(jù)庫里的比分信息。此外,還有一臺(tái)PC機(jī)負(fù)責(zé)周期性地從數(shù)據(jù)庫讀出全部7片場(chǎng)地的比分,顯示在體育館墻上的大屏幕上。這臺(tái)PC上還運(yùn)行著一個(gè)程序,負(fù)責(zé)生成比分?jǐn)?shù)據(jù)的靜態(tài)頁面,通過FTP上傳發(fā)布到某門戶網(wǎng)站的體育頻道。系統(tǒng)中還有一個(gè)錄入賽程(參賽隊(duì),運(yùn)動(dòng)員,出場(chǎng)順序等)數(shù)據(jù)庫的程序,運(yùn)行在數(shù)據(jù)庫服務(wù)器上。算下來整個(gè)系統(tǒng)有十來個(gè)程序,運(yùn)行在二十多臺(tái)設(shè)備(PC和PDA)上,還要考慮可靠性。將來有機(jī)會(huì)把這個(gè)小系統(tǒng)仔細(xì)講一講,挺有意思的。這是我第一次寫實(shí)際項(xiàng)目中的網(wǎng)絡(luò)程序,當(dāng)時(shí)

5、寫下來的感覺是像寫命令行與用戶交互的程序:程序在命令行輸出一句提示語,等待客戶輸入一句話,然后處理客戶輸入,再輸出下一句提示語,如此循環(huán)。只不過這里的“客戶”不是人,而是另一個(gè)程序。在建立好TCP連接之后,雙方的程序都是read/write循環(huán)(為求簡(jiǎn)單,我用的是blocking讀寫),直到有一方斷開連接。第二次是2010年編寫muduo網(wǎng)絡(luò)庫,我再次拿起了SocketsAPI,寫了一個(gè)基于Reactor模式的C++網(wǎng)絡(luò)庫。寫這個(gè)庫的目的之一就是想讓日常的網(wǎng)絡(luò)編程從SocketsAPI的瑣碎細(xì)節(jié)中解脫出來,讓

6、程序員專注于業(yè)務(wù)邏輯,把時(shí)間用在刀刃上。Muduo網(wǎng)絡(luò)庫的示例代碼包含了幾十個(gè)網(wǎng)絡(luò)程序,這些示例程序都沒有直接使用SocketsAPI。在此之外,無論是實(shí)習(xí)還是工作,雖然我寫的程序都會(huì)通過TCP協(xié)議與其他程序打交道,但我沒有直接使用過SocketsAPI。對(duì)于TCP網(wǎng)絡(luò)編程,我認(rèn)為核心是處理“三個(gè)半事件”,見《Muduo網(wǎng)絡(luò)編程示例之零:前言》中的“TCP網(wǎng)絡(luò)編程本質(zhì)論”。程序員的主要工作是在事件處理函數(shù)中實(shí)現(xiàn)業(yè)務(wù)邏輯,而不是和SocketsAPI較勁。這里還是沒有說清楚“網(wǎng)絡(luò)編程”是什么,請(qǐng)繼續(xù)閱讀后文“網(wǎng)

7、絡(luò)編程的各種任務(wù)角色”。學(xué)習(xí)網(wǎng)絡(luò)編程有用嗎?以上說的是比較底層的網(wǎng)絡(luò)編程,程序代碼直接面對(duì)從TCP或UDP收到的數(shù)據(jù)以及構(gòu)造數(shù)據(jù)包發(fā)出去。在實(shí)際工作中,另一種常見的情況是通過各種clientlibrary來與服務(wù)端打交道,或者在現(xiàn)成的框架中填空來實(shí)現(xiàn)server,或者采用更上層的通信方式。比如用libmemcached與memcached打交道,使用libpq來與PostgreSQL打交道,編寫Servlet來響應(yīng)http請(qǐng)求,使用某種RPC與其他進(jìn)程通信,等等。這些情況都會(huì)發(fā)生網(wǎng)絡(luò)通信,但不一定算作“網(wǎng)絡(luò)編

8、程”。如果你的工作是前面列舉的這些,學(xué)習(xí)TCP/IP網(wǎng)絡(luò)編程還有用嗎?我認(rèn)為還是有必要學(xué)一學(xué),至少在troubleshooting的時(shí)候有用。無論如何,這些library或framework都會(huì)調(diào)用底層的SocketsAPI來實(shí)現(xiàn)網(wǎng)絡(luò)功能。當(dāng)你的程序遇到一個(gè)線上問題,如果你熟悉SocketsAPI,那么從strace不難發(fā)現(xiàn)程序卡在哪里,盡管可能你沒有直接調(diào)用這些SocketsAPI。另外,熟悉TC

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動(dòng)畫的文件,查看預(yù)覽時(shí)可能會(huì)顯示錯(cuò)亂或異常,文件下載后無此問題,請(qǐng)放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對(duì)本文檔版權(quán)有爭(zhēng)議請(qǐng)及時(shí)聯(lián)系客服。
3. 下載前請(qǐng)仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時(shí)可能由于網(wǎng)絡(luò)波動(dòng)等原因無法下載或下載錯(cuò)誤,付費(fèi)完成后未能成功下載的用戶請(qǐng)聯(lián)系客服處理。