您好,登錄后才能下訂單哦!
緒論:
10000小時(shí)定律已成,現(xiàn)今將之前所學(xué)知識(shí)溫顧,所學(xué)所感所想記錄第一話(huà):
1.在學(xué)習(xí)軟件編程的時(shí)候,我們第一步是先學(xué)會(huì)一門(mén)語(yǔ)言,然后實(shí)現(xiàn)一個(gè)小模塊(封裝成類(lèi),函數(shù)等),來(lái)完成某個(gè)具體功能或解決某個(gè)具體問(wèn)題。然后在參與真正項(xiàng)目的時(shí)候,往往涉及到大量的封裝
,模塊與模塊之間的如何設(shè)計(jì),如何使得可擴(kuò)展性更好等又涉及到設(shè)計(jì)模式的問(wèn)題。但模塊與模塊之間并不一定只在一個(gè)進(jìn)程中,更不一定在一臺(tái)機(jī)器之上,那么當(dāng)我們需要進(jìn)程與進(jìn)程之間進(jìn)行交流,不同網(wǎng)絡(luò)節(jié)點(diǎn)之間需要交流之時(shí),應(yīng)該如何處理呢。進(jìn)程與進(jìn)程的通信(IPC inter-process communication),推薦UNIX進(jìn)程間通信(卷二),我們首先來(lái)討論網(wǎng)絡(luò)節(jié)點(diǎn)之間的通信(UNIX網(wǎng)絡(luò)編程卷1)。這幾本書(shū)主要向我們描述了UNIX是如何處理上述問(wèn)題的,以及常用系統(tǒng)調(diào)用,講述了部分原理,雖然其中有很多接口在實(shí)際編程中被封裝或者是被取代,但依舊具有很強(qiáng)的借鑒意義。
理解網(wǎng)絡(luò)通信程序的步驟:
1.確定不同網(wǎng)絡(luò)節(jié)點(diǎn)之間程序通信所用到的協(xié)議。
什么是通信協(xié)議?這是個(gè)很大的概念。計(jì)算機(jī)四大基礎(chǔ)課之一--《計(jì)算機(jī)網(wǎng)絡(luò)》本應(yīng)該是對(duì)這個(gè)問(wèn)題的詳盡描述。但本科書(shū)籍中還是講解太淺,以抽象講述為主,并沒(méi)有詳盡展開(kāi)(以后慢慢講解)。簡(jiǎn)單來(lái)說(shuō),(參見(jiàn)百科)通信協(xié)議是指雙方實(shí)體完成通信或服務(wù)所必須遵循的規(guī)則和約定。通過(guò)通信信道和設(shè)備互連起來(lái)的多個(gè)不同地理位置的數(shù)據(jù)通信系統(tǒng),要使其能協(xié)同工作實(shí)現(xiàn)信息交換和資源共享,它們之間必須具有共同的語(yǔ)言。交流什么、怎樣交流及何時(shí)交流,都必須遵循某種互相都能接受的規(guī)則。這個(gè)規(guī)則就是通信協(xié)議。
對(duì)于剛?cè)腴T(mén)的朋友來(lái)講,就算看完了剛才的講解,還是只能有個(gè)大致概念,我舉個(gè)不恰當(dāng)?shù)鼙蝗菀桌斫獾睦?/span>: 通過(guò)網(wǎng)絡(luò)傳輸,通信雙方都可以認(rèn)為是基于二進(jìn)制數(shù)據(jù)操作的。也就是說(shuō),發(fā)送方發(fā)送了一連串的二進(jìn)制數(shù)據(jù),通過(guò)網(wǎng)絡(luò),接收方接收到了這串二進(jìn)制數(shù)據(jù)(例如 10001001),然后這個(gè)8位二進(jìn)制中的每一位或者每幾位代表了某種意思,具體代表哪些意思,怎么解析,我們事先就可以指定發(fā)送方和接收方都遵循這個(gè) 規(guī)則。(當(dāng)然,通信協(xié)議還規(guī)定了很多其他的東西,如通信時(shí)間 排序規(guī)則等等,此處不一一舉出)
2.確定網(wǎng)絡(luò)模型,通常是client-server(即哪方發(fā)送請(qǐng)求,哪方接受請(qǐng)求處理后返回結(jié)果)(注:此處的client和server都應(yīng)該看成是獨(dú)立的進(jìn)程)
client-server模型是最常見(jiàn)的模型(但網(wǎng)絡(luò)通信中還有其他模型,以后碰到再詳解)。需要明確的是,服務(wù)器進(jìn)程一般都要寫(xiě)為守護(hù)進(jìn)程(暫且理解成要在服務(wù)器上長(zhǎng)時(shí)間運(yùn)行,不主動(dòng)關(guān)閉),在這里我想到了一個(gè)插曲: 玩c/c++的新手童鞋們經(jīng)常會(huì)碰到一個(gè)問(wèn)題,他們經(jīng)常會(huì)忘記釋放申請(qǐng)的內(nèi)存導(dǎo)致內(nèi)存泄露,然而他們還是一臉無(wú)所謂,因?yàn)楹芏鄷?shū)籍中有這么一句話(huà),在這個(gè) 程序整體運(yùn)行結(jié)束后,操作系統(tǒng)會(huì)自動(dòng)回收所有相關(guān)資源(包括內(nèi)存),于是他們每次很淡定,不是很在意手動(dòng)釋放內(nèi)存。大哥。。你這個(gè)程序是運(yùn)行一次完了就關(guān) 閉了,然而若是寫(xiě)服務(wù)器端程序,這個(gè)內(nèi)存泄露的口子只會(huì)越來(lái)越大,最終結(jié)果你懂的~~
以常見(jiàn)的web服務(wù)為例
其中還涉及到了許多其他問(wèn)題,比如,如何使得一個(gè)服務(wù)器同時(shí)與多個(gè)客戶(hù)通信,涉及到的代碼層面會(huì)碰到什么問(wèn)題等等。后續(xù)將慢慢詳解。下一篇將帶領(lǐng)大家查看一個(gè)簡(jiǎn)單通信程序?qū)嵗?span >
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。